{
    "_format": "hh-sol-artifact-1",
    "contractName": "Removal",
    "sourceName": "contracts/Removal.sol",
    "abi": [
        {
            "inputs": [],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "inputs": [],
            "name": "ForbiddenTransfer",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "InvalidData",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint8",
                    "name": "holdbackPercentage",
                    "type": "uint8"
                }
            ],
            "name": "InvalidHoldbackPercentage",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint8",
                    "name": "methodology",
                    "type": "uint8"
                }
            ],
            "name": "MethodologyTooLarge",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint8",
                    "name": "methodologyVersion",
                    "type": "uint8"
                }
            ],
            "name": "MethodologyVersionTooLarge",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "RemovalAlreadySoldOrConsigned",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "RemovalNotYetMinted",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes2",
                    "name": "country",
                    "type": "bytes2"
                },
                {
                    "internalType": "bytes2",
                    "name": "subdivision",
                    "type": "bytes2"
                }
            ],
            "name": "UncapitalizedString",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint8",
                    "name": "idVersion",
                    "type": "uint8"
                }
            ],
            "name": "UnsupportedIdVersion",
            "type": "error"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "approved",
                    "type": "bool"
                }
            ],
            "name": "ApprovalForAll",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "certificateRecipient",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "certificateAmount",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "certificateId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256[]",
                    "name": "removalIds",
                    "type": "uint256[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint256[]",
                    "name": "removalAmounts",
                    "type": "uint256[]"
                }
            ],
            "name": "Migrate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Paused",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "contract IMarket",
                    "name": "market",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "contract ICertificate",
                    "name": "certificate",
                    "type": "address"
                }
            ],
            "name": "RegisterContractAddresses",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "fromAddress",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "ReleaseRemoval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "previousAdminRole",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "newAdminRole",
                    "type": "bytes32"
                }
            ],
            "name": "RoleAdminChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleGranted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleRevoked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "projectId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "holdbackPercentage",
                    "type": "uint8"
                }
            ],
            "name": "SetHoldbackPercentage",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256[]",
                    "name": "ids",
                    "type": "uint256[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint256[]",
                    "name": "values",
                    "type": "uint256[]"
                }
            ],
            "name": "TransferBatch",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "TransferSingle",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "value",
                    "type": "string"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                }
            ],
            "name": "URI",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Unpaused",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "CONSIGNOR_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "DEFAULT_ADMIN_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "PAUSER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "RELEASER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256[]",
                    "name": "amounts",
                    "type": "uint256[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "ids",
                    "type": "uint256[]"
                }
            ],
            "name": "addBalance",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "accounts",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "ids",
                    "type": "uint256[]"
                }
            ],
            "name": "balanceOfBatch",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "",
                    "type": "uint256[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "consign",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                }
            ],
            "name": "decodeRemovalIdV0",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint8",
                            "name": "idVersion",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "methodology",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "methodologyVersion",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint16",
                            "name": "vintage",
                            "type": "uint16"
                        },
                        {
                            "internalType": "bytes2",
                            "name": "country",
                            "type": "bytes2"
                        },
                        {
                            "internalType": "bytes2",
                            "name": "subdivision",
                            "type": "bytes2"
                        },
                        {
                            "internalType": "address",
                            "name": "supplierAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint32",
                            "name": "subIdentifier",
                            "type": "uint32"
                        }
                    ],
                    "internalType": "struct DecodedRemovalIdV0",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                }
            ],
            "name": "exists",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getCertificateAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                }
            ],
            "name": "getHoldbackPercentage",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getMarketAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getMarketBalance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "name": "getOwnedTokenIds",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "",
                    "type": "uint256[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                }
            ],
            "name": "getProjectId",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleAdmin",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "uint256",
                    "name": "index",
                    "type": "uint256"
                }
            ],
            "name": "getRoleMember",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleMemberCount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "grantRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "hasRole",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "baseURI",
                    "type": "string"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                }
            ],
            "name": "isApprovedForAll",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256[]",
                    "name": "ids",
                    "type": "uint256[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "amounts",
                    "type": "uint256[]"
                },
                {
                    "internalType": "address",
                    "name": "certificateRecipient",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "certificateAmount",
                    "type": "uint256"
                }
            ],
            "name": "migrate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256[]",
                    "name": "amounts",
                    "type": "uint256[]"
                },
                {
                    "components": [
                        {
                            "internalType": "uint8",
                            "name": "idVersion",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "methodology",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "methodologyVersion",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint16",
                            "name": "vintage",
                            "type": "uint16"
                        },
                        {
                            "internalType": "bytes2",
                            "name": "country",
                            "type": "bytes2"
                        },
                        {
                            "internalType": "bytes2",
                            "name": "subdivision",
                            "type": "bytes2"
                        },
                        {
                            "internalType": "address",
                            "name": "supplierAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint32",
                            "name": "subIdentifier",
                            "type": "uint32"
                        }
                    ],
                    "internalType": "struct DecodedRemovalIdV0[]",
                    "name": "removals",
                    "type": "tuple[]"
                },
                {
                    "internalType": "uint256",
                    "name": "projectId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "scheduleStartTime",
                    "type": "uint256"
                },
                {
                    "internalType": "uint8",
                    "name": "holdbackPercentage",
                    "type": "uint8"
                }
            ],
            "name": "mintBatch",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes[]",
                    "name": "data",
                    "type": "bytes[]"
                }
            ],
            "name": "multicall",
            "outputs": [
                {
                    "internalType": "bytes[]",
                    "name": "results",
                    "type": "bytes[]"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "numberOfTokensOwnedByAddress",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "pause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "paused",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IMarket",
                    "name": "market",
                    "type": "address"
                },
                {
                    "internalType": "contract ICertificate",
                    "name": "certificate",
                    "type": "address"
                }
            ],
            "name": "registerContractAddresses",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "release",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "renounceRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "revokeRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256[]",
                    "name": "ids",
                    "type": "uint256[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "amounts",
                    "type": "uint256[]"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "safeBatchTransferFrom",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "safeTransferFrom",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "internalType": "bool",
                    "name": "approved",
                    "type": "bool"
                }
            ],
            "name": "setApprovalForAll",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "projectId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint8",
                    "name": "holdbackPercentage",
                    "type": "uint8"
                }
            ],
            "name": "setHoldbackPercentage",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                }
            ],
            "name": "totalSupply",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "unpause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "uri",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "bytecode": "0x60806040523480156200001157600080fd5b50620000226200002860201b60201c565b620001d3565b600060019054906101000a900460ff16156200007b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000729062000176565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620000ed5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620000e49190620001b6565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200015e602783620000ef565b91506200016b8262000100565b604082019050919050565b6000602082019050818103600083015262000191816200014f565b9050919050565b600060ff82169050919050565b620001b08162000198565b82525050565b6000602082019050620001cd6000830184620001a5565b92915050565b6180f280620001e36000396000f3fe608060405234801561001057600080fd5b50600436106101e25760003560e01c8062fdd58e146101e757806301ffc9a71461021757806304bcaa68146102475780630e89341c14610263578063248a9ca3146102935780632eb2c2d6146102c35780632f2ff15d146102df57806334697f45146102fb57806336568abe14610317578063366a4120146103335780633d932dfb1461034f5780633f4ba83a1461037f57806342c6281d146103895780634e1273f4146103b95780634f558e79146103e95780634fac7e41146104195780635c975abb146104495780636b425fc814610467578063789e8cdf146104835780638456cb59146104b35780639010d07c146104bd57806391d14854146104ed57806393ae796d1461051d578063964eec7014610539578063a217fddf14610557578063a22cb46514610575578063ac28af2414610591578063ac9650d8146105af578063b3eeaf36146105df578063b776d333146105fb578063bd85b0391461062b578063c48c01051461065b578063ca15c87314610679578063ca965357146106a9578063d547741f146106c5578063e63ab1e9146106e1578063e7334fe5146106ff578063e7f78c721461071d578063e985e9c51461073b578063f242432a1461076b578063f62d188814610787575b600080fd5b61020160048036038101906101fc91906152e3565b6107a3565b60405161020e9190615332565b60405180910390f35b610231600480360381019061022c91906153a5565b61086c565b60405161023e91906153ed565b60405180910390f35b610261600480360381019061025c919061546d565b61087e565b005b61027d60048036038101906102789190615514565b610a7d565b60405161028a91906155d1565b60405180910390f35b6102ad60048036038101906102a89190615629565b610b11565b6040516102ba9190615665565b60405180910390f35b6102dd60048036038101906102d89190615873565b610b31565b005b6102f960048036038101906102f49190615942565b610bd4565b005b61031560048036038101906103109190615982565b610bf5565b005b610331600480360381019061032c9190615942565b610d6f565b005b61034d60048036038101906103489190615a17565b610df2565b005b61036960048036038101906103649190615514565b610feb565b6040516103769190615332565b60405180910390f35b610387611009565b005b6103a3600480360381019061039e9190615514565b61103e565b6040516103b09190615b9b565b60405180910390f35b6103d360048036038101906103ce9190615c7a565b611056565b6040516103e09190615db0565b60405180910390f35b61040360048036038101906103fe9190615514565b61116f565b60405161041091906153ed565b60405180910390f35b610433600480360381019061042e9190615dd2565b611183565b6040516104409190615db0565b60405180910390f35b6104516111d4565b60405161045e91906153ed565b60405180910390f35b610481600480360381019061047c9190615dff565b6111eb565b005b61049d60048036038101906104989190615dd2565b611347565b6040516104aa9190615332565b60405180910390f35b6104bb611398565b005b6104d760048036038101906104d29190615e52565b6113cd565b6040516104e49190615ea1565b60405180910390f35b61050760048036038101906105029190615942565b6113fd565b60405161051491906153ed565b60405180910390f35b61053760048036038101906105329190615f38565b611468565b005b61054161153f565b60405161054e9190615332565b60405180910390f35b61055f61154a565b60405161056c9190615665565b60405180910390f35b61058f600480360381019061058a9190615fa4565b611551565b005b61059961156f565b6040516105a69190615665565b60405180910390f35b6105c960048036038101906105c4919061603a565b611593565b6040516105d6919061619e565b60405180910390f35b6105f960048036038101906105f491906161ec565b61169f565b005b61061560048036038101906106109190615514565b6116c3565b604051610622919061623b565b60405180910390f35b61064560048036038101906106409190615514565b611702565b6040516106529190615332565b60405180910390f35b61066361171f565b6040516106709190615665565b60405180910390f35b610693600480360381019061068e9190615629565b611743565b6040516106a09190615332565b60405180910390f35b6106c360048036038101906106be91906162ad565b611768565b005b6106df60048036038101906106da9190615942565b6119f2565b005b6106e9611a13565b6040516106f69190615665565b60405180910390f35b610707611a37565b6040516107149190615ea1565b60405180910390f35b610725611a62565b6040516107329190615ea1565b60405180910390f35b6107556004803603810190610750919061637c565b611a8d565b60405161076291906153ed565b60405180910390f35b610785600480360381019061078091906163bc565b611b21565b005b6107a1600480360381019061079c91906164f4565b611bc4565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080a906165af565b60405180910390fd5b6097600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061087782611e02565b9050919050565b7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb6108a881611e7c565b61019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a91906165e4565b828473ffffffffffffffffffffffffffffffffffffffff167fdac31445436d97d820b8ffd065c1e725892600c2407efafdfeea08b5ea4b1ed88a8a8a8a604051610987949392919061667b565b60405180910390a4610a7461099a611e90565b61019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600088886000806000604051602001610a60969594939291906166fb565b604051602081830303815290604052611e98565b50505050505050565b606060998054610a8c9061678b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab89061678b565b8015610b055780601f10610ada57610100808354040283529160200191610b05565b820191906000526020600020905b815481529060010190602001808311610ae857829003601f168201915b50505050509050919050565b600060fb6000838152602001908152602001600020600101549050919050565b61019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b73611e90565b73ffffffffffffffffffffffffffffffffffffffff1614610bc0576040517fece8527800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bcd85858585856121bc565b5050505050565b610bdd82610b11565b610be681611e7c565b610bf0838361225d565b505050565b7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb610c1f81611e7c565b60005b83839050811015610cc95760006101946000868685818110610c4757610c466167bc565b5b9050602002013581526020019081526020016000205403610cb857838382818110610c7557610c746167bc565b5b905060200201356040517fac0522ad000000000000000000000000000000000000000000000000000000008152600401610caf9190615332565b60405180910390fd5b80610cc29061681a565b9050610c22565b50610d6786848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060405180602001604052806000815250612273565b505050505050565b610d77611e90565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb906168d4565b60405180910390fd5b610dee82826124a0565b5050565b7f88f3509f0e42391f2d94ebfb2a37cbd0782b1b8f73715330017f4663290b8117610e1c81611e7c565b600080610e31610e2b866124b6565b866107a3565b90506000811115610e64576000610e4885836124cc565b9050610e5486826124e5565b8083610e6091906168f4565b9250505b83821015610fe4576000610ee63073ffffffffffffffffffffffffffffffffffffffff1663e7334fe56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee0919061693d565b876107a3565b90506000811115610f24576000610f088487610f02919061696a565b836124cc565b9050610f148782612551565b8084610f2091906168f4565b9350505b84831015610fe2576000610fa63073ffffffffffffffffffffffffffffffffffffffff1663e7f78c726040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa0919061693d565b886107a3565b1115610fe15760008386610fba919061696a565b9050610fd1878588610fcc919061696a565b612719565b8084610fdd91906168f4565b9350505b5b505b5050505050565b60006101946000838152602001908152602001600020549050919050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61103381611e7c565b61103b612879565b50565b61104661518b565b61104f826128dc565b9050919050565b6060815183511461109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109390616a10565b60405180910390fd5b6000835167ffffffffffffffff8111156110b9576110b8615680565b5b6040519080825280602002602001820160405280156110e75781602001602082028036833780820191505090505b50905060005b84518110156111645761113485828151811061110c5761110b6167bc565b5b6020026020010151858381518110611127576111266167bc565b5b60200260200101516107a3565b828281518110611147576111466167bc565b5b6020026020010181815250508061115d9061681a565b90506110ed565b508091505092915050565b60008061117b83611702565b119050919050565b60606111cd61019560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206129d0565b9050919050565b6000603360009054906101000a900460ff16905090565b7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb61121581611e7c565b61019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806112c0575061019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b1561130257826040517f4a7a53580000000000000000000000000000000000000000000000000000000081526004016112f99190615332565b60405180910390fd5b6113418461019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168585604051806020016040528060008152506129f1565b50505050565b600061139161019560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c8f565b9050919050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6113c281611e7c565b6113ca612ca4565b50565b60006113f58261012d6000868152602001908152602001600020612d0790919063ffffffff16565b905092915050565b600060fb600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611470612d21565b6000801b61147d81611e7c565b8261019160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508161019260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa948457069516ab10917665b0b5d6b8043d77b39f57ca760ef0d3d41042775478383604051611532929190616aa6565b60405180910390a1505050565b600061019654905090565b6000801b81565b611559612d21565b61156b611564611e90565b8383612d6b565b5050565b7f88f3509f0e42391f2d94ebfb2a37cbd0782b1b8f73715330017f4663290b811781565b60608282905067ffffffffffffffff8111156115b2576115b1615680565b5b6040519080825280602002602001820160405280156115e557816020015b60608152602001906001900390816115d05790505b50905060005b83839050811015611698576116673085858481811061160d5761160c6167bc565b5b905060200281019061161f9190616ade565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612ed7565b82828151811061167a576116796167bc565b5b602002602001018190525080806116909061681a565b9150506115eb565b5092915050565b6116a7612d21565b6000801b6116b481611e7c565b6116be8383612fbb565b505050565b60006101936000610194600085815260200190815260200160002054815260200190815260200160002060009054906101000a900460ff169050919050565b600060c96000838152602001908152602001600020549050919050565b7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb81565b600061176161012d600084815260200190815260200160002061306e565b9050919050565b7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb61179281611e7c565b600061179f878787613083565b90506117ab8584612fbb565b6118078a828b8b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060405180602001604052806000815250612273565b600061019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385d3d64b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611877573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189b919061693d565b90508073ffffffffffffffffffffffffffffffffffffffff1663a4b186f8876040518263ffffffff1660e01b81526004016118d69190615332565b602060405180830381865afa1580156118f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119179190616b56565b6119e5578073ffffffffffffffffffffffffffffffffffffffff166355135b6787878b8b600081811061194d5761194c6167bc565b5b9050610100020160200160208101906119669190616b83565b8c8c600081811061197a576119796167bc565b5b9050610100020160400160208101906119939190616b83565b6040518563ffffffff1660e01b81526004016119b29493929190616bb0565b600060405180830381600087803b1580156119cc57600080fd5b505af11580156119e0573d6000803e3d6000fd5b505050505b5050505050505050505050565b6119fb82610b11565b611a0481611e7c565b611a0e83836124a0565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b600061019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000609860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b63611e90565b73ffffffffffffffffffffffffffffffffffffffff1614611bb0576040517fece8527800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bbd858585858561315b565b5050505050565b60008060019054906101000a900460ff16159050808015611bf55750600160008054906101000a900460ff1660ff16105b80611c225750611c04306131fc565b158015611c215750600160008054906101000a900460ff1660ff16145b5b611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890616c67565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611c9e576001600060016101000a81548160ff0219169083151502179055505b611ca661321f565b611cae613270565b611cd682604051602001611cc29190616d0f565b6040516020818303038152906040526132c1565b611cde61331c565b611ce6613388565b611cee6133d9565b611cf661342a565b611cfe61347b565b611d126000801b611d0d611e90565b61225d565b611d437f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611d3e611e90565b61225d565b611d747fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb611d6f611e90565b61225d565b611da57f88f3509f0e42391f2d94ebfb2a37cbd0782b1b8f73715330017f4663290b8117611da0611e90565b61225d565b8015611dfe5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611df59190616d6c565b60405180910390a15b5050565b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e755750611e74826134cc565b5b9050919050565b611e8d81611e88611e90565b613546565b50565b600033905090565b8151835114611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390616df9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290616e8b565b60405180910390fd5b6000611f55611e90565b9050611f658187878787876135cb565b60005b8451811015612119576000858281518110611f8657611f856167bc565b5b602002602001015190506000858381518110611fa557611fa46167bc565b5b6020026020010151905060006097600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e90616f1d565b60405180910390fd5b8181036097600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816097600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120fe91906168f4565b92505081905550505050806121129061681a565b9050611f68565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612190929190616f3d565b60405180910390a46121a6818787878787613935565b6121b4818787878787613956565b505050505050565b6121c4611e90565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061220a575061220985612204611e90565b611a8d565b5b612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224090616fe6565b60405180910390fd5b6122568585858585611e98565b5050505050565b612265612d21565b61226f8282613b2d565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036122e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d990617078565b60405180910390fd5b8151835114612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d90616df9565b60405180910390fd5b6000612330611e90565b9050612341816000878787876135cb565b60005b84518110156123fb578381815181106123605761235f6167bc565b5b60200260200101516097600087848151811061237f5761237e6167bc565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123e191906168f4565b9250508190555080806123f39061681a565b915050612344565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612473929190616f3d565b60405180910390a461248a81600087878787613935565b61249981600087878787613956565b5050505050565b6124a8612d21565b6124b28282613b62565b5050565b60006124c58260146004613b97565b9050919050565b60008183106124db57816124dd565b825b905092915050565b60006124f0836124b6565b90506124fd818484613bfb565b8073ffffffffffffffffffffffffffffffffffffffff16837fa76ba9683000f0598aec5ed73132d1bdb673107c3e609fcbff0dfb9296467c43846040516125449190615332565b60405180910390a3505050565b6125ca3073ffffffffffffffffffffffffffffffffffffffff1663e7334fe56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c3919061693d565b8383613bfb565b61019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337bdc99b836040518263ffffffff1660e01b81526004016126269190615332565b600060405180830381600087803b15801561264057600080fd5b505af1158015612654573d6000803e3d6000fd5b505050503073ffffffffffffffffffffffffffffffffffffffff1663e7334fe56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c7919061693d565b73ffffffffffffffffffffffffffffffffffffffff16827fa76ba9683000f0598aec5ed73132d1bdb673107c3e609fcbff0dfb9296467c438360405161270d9190615332565b60405180910390a35050565b60003073ffffffffffffffffffffffffffffffffffffffff1663e7f78c726040518163ffffffff1660e01b8152600401602060405180830381865afa158015612766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278a919061693d565b9050612797818484613bfb565b61019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379fcc08a836040518263ffffffff1660e01b81526004016127f39190615332565b600060405180830381600087803b15801561280d57600080fd5b505af1158015612821573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16837fa76ba9683000f0598aec5ed73132d1bdb673107c3e609fcbff0dfb9296467c438460405161286c9190615332565b60405180910390a3505050565b612881613e43565b6000603360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128c5611e90565b6040516128d29190615ea1565b60405180910390a1565b6128e461518b565b6040518061010001604052806128f984613e8c565b60ff16815260200161290a84613ea2565b60ff16815260200161291b84613ebc565b60ff16815260200161292c84613ed5565b61ffff16815260200161293e84613eeb565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200161296d84613f04565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200161299c846124b6565b73ffffffffffffffffffffffffffffffffffffffff1681526020016129c084613f1d565b63ffffffff168152509050919050565b606060006129e083600001613f33565b905060608190508092505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5790616e8b565b60405180910390fd5b6000612a6a611e90565b90506000612a7785613f8f565b90506000612a8485613f8f565b9050612a948389898585896135cb565b60006097600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2390616f1d565b60405180910390fd5b8581036097600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856097600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612be391906168f4565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612c60929190617098565b60405180910390a4612c76848a8a86868a613935565b612c84848a8a8a8a8a614009565b505050505050505050565b6000612c9d826000016141e0565b9050919050565b612cac612d21565b6001603360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612cf0611e90565b604051612cfd9190615ea1565b60405180910390a1565b6000612d1683600001836141f1565b60001c905092915050565b612d296111d4565b15612d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d609061710d565b60405180910390fd5b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd09061719f565b60405180910390fd5b80609860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612eca91906153ed565b60405180910390a3505050565b6060612ee2836131fc565b612f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1890617231565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1684604051612f49919061728d565b600060405180830381855af49150503d8060008114612f84576040519150601f19603f3d011682016040523d82523d6000602084013e612f89565b606091505b5091509150612fb182826040518060600160405280602781526020016180966027913961421c565b9250505092915050565b60648160ff16111561300457806040517fe9cf3fea000000000000000000000000000000000000000000000000000000008152600401612ffb919061623b565b60405180910390fd5b80610193600084815260200190815260200160002060006101000a81548160ff021916908360ff1602179055507fa08477ae79c0fbe93cf684988c5b96bfec3bf0e18cba76ebdaa7074eaf8be74782826040516130629291906172a4565b60405180910390a15050565b600061307c826000016141e0565b9050919050565b606060008484905067ffffffffffffffff8111156130a4576130a3615680565b5b6040519080825280602002602001820160405280156130d25781602001602082028036833780820191505090505b50905060005b8585905081101561314f5760006131178787848181106130fb576130fa6167bc565b5b905061010002018036038101906131129190617420565b61423e565b90506131238186614330565b80838381518110613137576131366167bc565b5b602002602001018181525050508060010190506130d8565b50809150509392505050565b613163611e90565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806131a957506131a8856131a3611e90565b611a8d565b5b6131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df90616fe6565b60405180910390fd5b6131f585858585856129f1565b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff1661326e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613265906174c0565b60405180910390fd5b565b600060019054906101000a900460ff166132bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b6906174c0565b60405180910390fd5b565b600060019054906101000a900460ff16613310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613307906174c0565b60405180910390fd5b61331981614356565b50565b600060019054906101000a900460ff1661336b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613362906174c0565b60405180910390fd5b6000603360006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff166133d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ce906174c0565b60405180910390fd5b565b600060019054906101000a900460ff16613428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341f906174c0565b60405180910390fd5b565b600060019054906101000a900460ff16613479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613470906174c0565b60405180910390fd5b565b600060019054906101000a900460ff166134ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c1906174c0565b60405180910390fd5b565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061353f575061353e82614369565b5b9050919050565b61355082826113fd565b6135c75761355d8161444b565b61356b8360001c6020614478565b60405160200161357c929190617578565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135be91906155d1565b60405180910390fd5b5050565b6135d3612d21565b600061019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148061368a57508173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806136c15750600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b8061376157506136f87fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb6136f3611e90565b6113fd565b801561376057508173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148061375f575061375e7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb886113fd565b5b5b5b905060008651905060005b8181101561391a576000888281518110613789576137886167bc565b5b6020026020010151905060008883815181106137a8576137a76167bc565b5b602002602001015190506137bc818c6146b4565b6137f2576040517fece8527800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16036138405780610196600082825461383891906168f4565b925050819055505b8673ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff160361388e57806101966000828254613886919061696a565b925050819055505b841580156138d057506138a0826124b6565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614155b15613907576040517fece8527800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050806139139061681a565b905061376c565b506139298a8a8a8a8a8a6147a9565b50505050505050505050565b613940858585614979565b61394e868686868686614aea565b505050505050565b6139758473ffffffffffffffffffffffffffffffffffffffff166131fc565b15613b25578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016139bb9594939291906175fc565b6020604051808303816000875af19250505080156139f757506040513d601f19601f820116820180604052508101906139f49190617679565b60015b613a9c57613a036176b3565b806308c379a003613a5f5750613a176176d5565b80613a225750613a61565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5691906155d1565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a93906177d7565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1a90617869565b60405180910390fd5b505b505050505050565b613b378282614af2565b613b5d8161012d6000858152602001908152602001600020614bd390919063ffffffff16565b505050565b613b6c8282614c03565b613b928161012d6000858152602001908152602001600020614ce590919063ffffffff16565b505050565b600080600883613ba79190617889565b6001600886613bb69190617889565b6002613bc291906179fe565b613bcc919061696a565b60001b901b90506000818660001b169050600884613bea9190617889565b81901c60001c925050509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6190617abb565b60405180910390fd5b6000613c74611e90565b90506000613c8184613f8f565b90506000613c8e84613f8f565b9050613cae838760008585604051806020016040528060008152506135cb565b60006097600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015613d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d3d90617b4d565b60405180910390fd5b8481036097600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051613e14929190617098565b60405180910390a4613e3a84886000868660405180602001604052806000815250613935565b50505050505050565b613e4b6111d4565b613e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e8190617bb9565b60405180910390fd5b565b6000613e9b826001601f613b97565b9050919050565b60006004613eb3836001601e613b97565b901c9050919050565b6000600f613ecd836001601e613b97565b169050919050565b6000613ee4826002601c613b97565b9050919050565b6000613efa826002601a613b97565b60f01b9050919050565b6000613f138260026018613b97565b60f01b9050919050565b6000613f2c8260046000613b97565b9050919050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613f8357602002820191906000526020600020905b815481526020019060010190808311613f6f575b50505050509050919050565b60606000600167ffffffffffffffff811115613fae57613fad615680565b5b604051908082528060200260200182016040528015613fdc5781602001602082028036833780820191505090505b5090508281600081518110613ff457613ff36167bc565b5b60200260200101818152505080915050919050565b6140288473ffffffffffffffffffffffffffffffffffffffff166131fc565b156141d8578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161406e959493929190617bd9565b6020604051808303816000875af19250505080156140aa57506040513d601f19601f820116820180604052508101906140a79190617679565b60015b61414f576140b66176b3565b806308c379a00361411257506140ca6176d5565b806140d55750614114565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410991906155d1565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614146906177d7565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146141d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141cd90617869565b60405180910390fd5b505b505050505050565b600081600001805490509050919050565b6000826000018281548110614209576142086167bc565b5b9060005260206000200154905092915050565b6060831561422c57829050614237565b6142368383614d15565b5b9392505050565b600061424982614d65565b600082604001516004846020015160ff16901b1760ff169050600860006142709190617889565b8360e0015163ffffffff16901b6008600461428b9190617889565b8460c0015173ffffffffffffffffffffffffffffffffffffffff16901b600860186142b69190617889565b8560a0015160f01c61ffff16901b6008601a6142d29190617889565b866080015160f01c61ffff16901b6008601c6142ee9190617889565b876060015161ffff16901b6008601e6143079190617889565b86901b6008601f6143189190617889565b896000015160ff16901b171717171717915050919050565b61433982614ec7565b806101946000848152602001908152602001600020819055505050565b80609990816143659190617dd5565b5050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061443457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80614444575061444382614f18565b5b9050919050565b60606144718273ffffffffffffffffffffffffffffffffffffffff16601460ff16614478565b9050919050565b60606000600283600261448b9190617889565b61449591906168f4565b67ffffffffffffffff8111156144ae576144ad615680565b5b6040519080825280601f01601f1916602001820160405280156144e05781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110614518576145176167bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061457c5761457b6167bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026145bc9190617889565b6145c691906168f4565b90505b6001811115614666577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110614608576146076167bc565b5b1a60f81b82828151811061461f5761461e6167bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061465f90617ea7565b90506145c9565b50600084146146aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146a190617f1c565b60405180910390fd5b8091505092915050565b600061019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480614761575061019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61477f576000655af3107a4000846147799190617f6b565b146147a1565b6000831180156147a057506000655af3107a40008461479e9190617f6b565b145b5b905092915050565b6147b7868686868686614f82565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036148685760005b83518110156148665782818151811061480a576148096167bc565b5b602002602001015160c96000868481518110614829576148286167bc565b5b60200260200101518152602001908152602001600020600082825461484e91906168f4565b925050819055508061485f9061681a565b90506147ee565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036149715760005b835181101561496f5760008482815181106148bd576148bc6167bc565b5b6020026020010151905060008483815181106148dc576148db6167bc565b5b60200260200101519050600060c9600084815260200190815260200160002054905081811015614941576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016149389061800e565b60405180910390fd5b81810360c9600085815260200190815260200160002081905550505050806149689061681a565b905061489f565b505b505050505050565b600061019560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061019560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008351905060005b81811015614ae1576000858281518110614a2757614a266167bc565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614614a8c576000614a7189836107a3565b03614a8b57614a898185614f8a90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614614ad557614ad38186614fa490919063ffffffff16565b505b50806001019050614a0a565b50505050505050565b505050505050565b614afc82826113fd565b614bcf57600160fb600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550614b74611e90565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000614bfb836000018373ffffffffffffffffffffffffffffffffffffffff1660001b614fbe565b905092915050565b614c0d82826113fd565b15614ce157600060fb600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550614c86611e90565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000614d0d836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61502e565b905092915050565b600082511115614d285781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614d5c91906155d1565b60405180910390fd5b6000816000015160ff1614614db55780600001516040517ff981da6c000000000000000000000000000000000000000000000000000000008152600401614dac919061623b565b60405180910390fd5b600f816040015160ff161115614e065780604001516040517f4962a53a000000000000000000000000000000000000000000000000000000008152600401614dfd919061623b565b60405180910390fd5b600f816020015160ff161115614e575780602001516040517f46ac6e0f000000000000000000000000000000000000000000000000000000008152600401614e4e919061623b565b60405180910390fd5b614e648160800151615142565b8015614e795750614e788160a00151615142565b5b614ec45780608001518160a001516040517f81036ebb000000000000000000000000000000000000000000000000000000008152600401614ebb92919061803d565b60405180910390fd5b50565b600061019460008381526020019081526020016000205414614f15576040517f5cb045db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b6000614f9c836000018360001b61502e565b905092915050565b6000614fb6836000018360001b614fbe565b905092915050565b6000614fca8383615168565b615023578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050615028565b600090505b92915050565b60008083600101600084815260200190815260200160002054905060008114615136576000600182615060919061696a565b9050600060018660000180549050615078919061696a565b90508181146150e7576000866000018281548110615099576150986167bc565b5b90600052602060002001549050808760000184815481106150bd576150bc6167bc565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b856000018054806150fb576150fa618066565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061513c565b60009150505b92915050565b60008160001a8260011a60408111605b82101660408311605b8410161692505050919050565b600080836001016000848152602001908152602001600020541415905092915050565b604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600061ffff16815260200160007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200160007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600063ffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061527a8261524f565b9050919050565b61528a8161526f565b811461529557600080fd5b50565b6000813590506152a781615281565b92915050565b6000819050919050565b6152c0816152ad565b81146152cb57600080fd5b50565b6000813590506152dd816152b7565b92915050565b600080604083850312156152fa576152f9615245565b5b600061530885828601615298565b9250506020615319858286016152ce565b9150509250929050565b61532c816152ad565b82525050565b60006020820190506153476000830184615323565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6153828161534d565b811461538d57600080fd5b50565b60008135905061539f81615379565b92915050565b6000602082840312156153bb576153ba615245565b5b60006153c984828501615390565b91505092915050565b60008115159050919050565b6153e7816153d2565b82525050565b600060208201905061540260008301846153de565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261542d5761542c615408565b5b8235905067ffffffffffffffff81111561544a5761544961540d565b5b60208301915083602082028301111561546657615465615412565b5b9250929050565b6000806000806000806080878903121561548a57615489615245565b5b600087013567ffffffffffffffff8111156154a8576154a761524a565b5b6154b489828a01615417565b9650965050602087013567ffffffffffffffff8111156154d7576154d661524a565b5b6154e389828a01615417565b945094505060406154f689828a01615298565b925050606061550789828a016152ce565b9150509295509295509295565b60006020828403121561552a57615529615245565b5b6000615538848285016152ce565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561557b578082015181840152602081019050615560565b60008484015250505050565b6000601f19601f8301169050919050565b60006155a382615541565b6155ad818561554c565b93506155bd81856020860161555d565b6155c681615587565b840191505092915050565b600060208201905081810360008301526155eb8184615598565b905092915050565b6000819050919050565b615606816155f3565b811461561157600080fd5b50565b600081359050615623816155fd565b92915050565b60006020828403121561563f5761563e615245565b5b600061564d84828501615614565b91505092915050565b61565f816155f3565b82525050565b600060208201905061567a6000830184615656565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6156b882615587565b810181811067ffffffffffffffff821117156156d7576156d6615680565b5b80604052505050565b60006156ea61523b565b90506156f682826156af565b919050565b600067ffffffffffffffff82111561571657615715615680565b5b602082029050602081019050919050565b600061573a615735846156fb565b6156e0565b9050808382526020820190506020840283018581111561575d5761575c615412565b5b835b81811015615786578061577288826152ce565b84526020840193505060208101905061575f565b5050509392505050565b600082601f8301126157a5576157a4615408565b5b81356157b5848260208601615727565b91505092915050565b600080fd5b600067ffffffffffffffff8211156157de576157dd615680565b5b6157e782615587565b9050602081019050919050565b82818337600083830152505050565b6000615816615811846157c3565b6156e0565b905082815260208101848484011115615832576158316157be565b5b61583d8482856157f4565b509392505050565b600082601f83011261585a57615859615408565b5b813561586a848260208601615803565b91505092915050565b600080600080600060a0868803121561588f5761588e615245565b5b600061589d88828901615298565b95505060206158ae88828901615298565b945050604086013567ffffffffffffffff8111156158cf576158ce61524a565b5b6158db88828901615790565b935050606086013567ffffffffffffffff8111156158fc576158fb61524a565b5b61590888828901615790565b925050608086013567ffffffffffffffff8111156159295761592861524a565b5b61593588828901615845565b9150509295509295909350565b6000806040838503121561595957615958615245565b5b600061596785828601615614565b925050602061597885828601615298565b9150509250929050565b60008060008060006060868803121561599e5761599d615245565b5b60006159ac88828901615298565b955050602086013567ffffffffffffffff8111156159cd576159cc61524a565b5b6159d988828901615417565b9450945050604086013567ffffffffffffffff8111156159fc576159fb61524a565b5b615a0888828901615417565b92509250509295509295909350565b60008060408385031215615a2e57615a2d615245565b5b6000615a3c858286016152ce565b9250506020615a4d858286016152ce565b9150509250929050565b600060ff82169050919050565b615a6d81615a57565b82525050565b600061ffff82169050919050565b615a8a81615a73565b82525050565b60007fffff00000000000000000000000000000000000000000000000000000000000082169050919050565b615ac581615a90565b82525050565b615ad48161526f565b82525050565b600063ffffffff82169050919050565b615af381615ada565b82525050565b61010082016000820151615b106000850182615a64565b506020820151615b236020850182615a64565b506040820151615b366040850182615a64565b506060820151615b496060850182615a81565b506080820151615b5c6080850182615abc565b5060a0820151615b6f60a0850182615abc565b5060c0820151615b8260c0850182615acb565b5060e0820151615b9560e0850182615aea565b50505050565b600061010082019050615bb16000830184615af9565b92915050565b600067ffffffffffffffff821115615bd257615bd1615680565b5b602082029050602081019050919050565b6000615bf6615bf184615bb7565b6156e0565b90508083825260208201905060208402830185811115615c1957615c18615412565b5b835b81811015615c425780615c2e8882615298565b845260208401935050602081019050615c1b565b5050509392505050565b600082601f830112615c6157615c60615408565b5b8135615c71848260208601615be3565b91505092915050565b60008060408385031215615c9157615c90615245565b5b600083013567ffffffffffffffff811115615caf57615cae61524a565b5b615cbb85828601615c4c565b925050602083013567ffffffffffffffff811115615cdc57615cdb61524a565b5b615ce885828601615790565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d27816152ad565b82525050565b6000615d398383615d1e565b60208301905092915050565b6000602082019050919050565b6000615d5d82615cf2565b615d678185615cfd565b9350615d7283615d0e565b8060005b83811015615da3578151615d8a8882615d2d565b9750615d9583615d45565b925050600181019050615d76565b5085935050505092915050565b60006020820190508181036000830152615dca8184615d52565b905092915050565b600060208284031215615de857615de7615245565b5b6000615df684828501615298565b91505092915050565b600080600060608486031215615e1857615e17615245565b5b6000615e2686828701615298565b9350506020615e37868287016152ce565b9250506040615e48868287016152ce565b9150509250925092565b60008060408385031215615e6957615e68615245565b5b6000615e7785828601615614565b9250506020615e88858286016152ce565b9150509250929050565b615e9b8161526f565b82525050565b6000602082019050615eb66000830184615e92565b92915050565b6000615ec78261526f565b9050919050565b615ed781615ebc565b8114615ee257600080fd5b50565b600081359050615ef481615ece565b92915050565b6000615f058261526f565b9050919050565b615f1581615efa565b8114615f2057600080fd5b50565b600081359050615f3281615f0c565b92915050565b60008060408385031215615f4f57615f4e615245565b5b6000615f5d85828601615ee5565b9250506020615f6e85828601615f23565b9150509250929050565b615f81816153d2565b8114615f8c57600080fd5b50565b600081359050615f9e81615f78565b92915050565b60008060408385031215615fbb57615fba615245565b5b6000615fc985828601615298565b9250506020615fda85828601615f8f565b9150509250929050565b60008083601f840112615ffa57615ff9615408565b5b8235905067ffffffffffffffff8111156160175761601661540d565b5b60208301915083602082028301111561603357616032615412565b5b9250929050565b6000806020838503121561605157616050615245565b5b600083013567ffffffffffffffff81111561606f5761606e61524a565b5b61607b85828601615fe4565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60006160da826160b3565b6160e481856160be565b93506160f481856020860161555d565b6160fd81615587565b840191505092915050565b600061611483836160cf565b905092915050565b6000602082019050919050565b600061613482616087565b61613e8185616092565b935083602082028501616150856160a3565b8060005b8581101561618c578484038952815161616d8582616108565b94506161788361611c565b925060208a01995050600181019050616154565b50829750879550505050505092915050565b600060208201905081810360008301526161b88184616129565b905092915050565b6161c981615a57565b81146161d457600080fd5b50565b6000813590506161e6816161c0565b92915050565b6000806040838503121561620357616202615245565b5b6000616211858286016152ce565b9250506020616222858286016161d7565b9150509250929050565b61623581615a57565b82525050565b6000602082019050616250600083018461622c565b92915050565b60008083601f84011261626c5761626b615408565b5b8235905067ffffffffffffffff8111156162895761628861540d565b5b602083019150836101008202830111156162a6576162a5615412565b5b9250929050565b60008060008060008060008060c0898b0312156162cd576162cc615245565b5b60006162db8b828c01615298565b985050602089013567ffffffffffffffff8111156162fc576162fb61524a565b5b6163088b828c01615417565b9750975050604089013567ffffffffffffffff81111561632b5761632a61524a565b5b6163378b828c01616256565b9550955050606061634a8b828c016152ce565b935050608061635b8b828c016152ce565b92505060a061636c8b828c016161d7565b9150509295985092959890939650565b6000806040838503121561639357616392615245565b5b60006163a185828601615298565b92505060206163b285828601615298565b9150509250929050565b600080600080600060a086880312156163d8576163d7615245565b5b60006163e688828901615298565b95505060206163f788828901615298565b9450506040616408888289016152ce565b9350506060616419888289016152ce565b925050608086013567ffffffffffffffff81111561643a5761643961524a565b5b61644688828901615845565b9150509295509295909350565b600067ffffffffffffffff82111561646e5761646d615680565b5b61647782615587565b9050602081019050919050565b600061649761649284616453565b6156e0565b9050828152602081018484840111156164b3576164b26157be565b5b6164be8482856157f4565b509392505050565b600082601f8301126164db576164da615408565b5b81356164eb848260208601616484565b91505092915050565b60006020828403121561650a57616509615245565b5b600082013567ffffffffffffffff8111156165285761652761524a565b5b616534848285016164c6565b91505092915050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000616599602a8361554c565b91506165a48261653d565b604082019050919050565b600060208201905081810360008301526165c88161658c565b9050919050565b6000815190506165de816152b7565b92915050565b6000602082840312156165fa576165f9615245565b5b6000616608848285016165cf565b91505092915050565b600080fd5b82818337505050565b600061662b8385615cfd565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561665e5761665d616611565b5b60208302925061666f838584616616565b82840190509392505050565b6000604082019050818103600083015261669681868861661f565b905081810360208301526166ab81848661661f565b905095945050505050565b6000819050919050565b6000819050919050565b60006166e56166e06166db846166b6565b6166c0565b615a57565b9050919050565b6166f5816166ca565b82525050565b600060c08201905061671060008301896153de565b61671d6020830188615e92565b61672a6040830187615323565b6167376060830186615e92565b61674460808301856166ec565b61675160a08301846166ec565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806167a357607f821691505b6020821081036167b6576167b561675c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000616825826152ad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203616857576168566167eb565b5b600182019050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006168be602f8361554c565b91506168c982616862565b604082019050919050565b600060208201905081810360008301526168ed816168b1565b9050919050565b60006168ff826152ad565b915061690a836152ad565b9250828201905080821115616922576169216167eb565b5b92915050565b60008151905061693781615281565b92915050565b60006020828403121561695357616952615245565b5b600061696184828501616928565b91505092915050565b6000616975826152ad565b9150616980836152ad565b9250828203905081811115616998576169976167eb565b5b92915050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006169fa60298361554c565b9150616a058261699e565b604082019050919050565b60006020820190508181036000830152616a29816169ed565b9050919050565b6000616a4b616a46616a418461524f565b6166c0565b61524f565b9050919050565b6000616a5d82616a30565b9050919050565b6000616a6f82616a52565b9050919050565b616a7f81616a64565b82525050565b6000616a9082616a52565b9050919050565b616aa081616a85565b82525050565b6000604082019050616abb6000830185616a76565b616ac86020830184616a97565b9392505050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112616afb57616afa616acf565b5b80840192508235915067ffffffffffffffff821115616b1d57616b1c616ad4565b5b602083019250600182023603831315616b3957616b38616ad9565b5b509250929050565b600081519050616b5081615f78565b92915050565b600060208284031215616b6c57616b6b615245565b5b6000616b7a84828501616b41565b91505092915050565b600060208284031215616b9957616b98615245565b5b6000616ba7848285016161d7565b91505092915050565b6000608082019050616bc56000830187615323565b616bd26020830186615323565b616bdf604083018561622c565b616bec606083018461622c565b95945050505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000616c51602e8361554c565b9150616c5c82616bf5565b604082019050919050565b60006020820190508181036000830152616c8081616c44565b9050919050565b600081905092915050565b6000616c9d82615541565b616ca78185616c87565b9350616cb781856020860161555d565b80840191505092915050565b7f7b69647d00000000000000000000000000000000000000000000000000000000600082015250565b6000616cf9600483616c87565b9150616d0482616cc3565b600482019050919050565b6000616d1b8284616c92565b9150616d2682616cec565b915081905092915050565b6000819050919050565b6000616d56616d51616d4c84616d31565b6166c0565b615a57565b9050919050565b616d6681616d3b565b82525050565b6000602082019050616d816000830184616d5d565b92915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000616de360288361554c565b9150616dee82616d87565b604082019050919050565b60006020820190508181036000830152616e1281616dd6565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000616e7560258361554c565b9150616e8082616e19565b604082019050919050565b60006020820190508181036000830152616ea481616e68565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000616f07602a8361554c565b9150616f1282616eab565b604082019050919050565b60006020820190508181036000830152616f3681616efa565b9050919050565b60006040820190508181036000830152616f578185615d52565b90508181036020830152616f6b8184615d52565b90509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000616fd0602e8361554c565b9150616fdb82616f74565b604082019050919050565b60006020820190508181036000830152616fff81616fc3565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061706260218361554c565b915061706d82617006565b604082019050919050565b6000602082019050818103600083015261709181617055565b9050919050565b60006040820190506170ad6000830185615323565b6170ba6020830184615323565b9392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006170f760108361554c565b9150617102826170c1565b602082019050919050565b60006020820190508181036000830152617126816170ea565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061718960298361554c565b91506171948261712d565b604082019050919050565b600060208201905081810360008301526171b88161717c565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b600061721b60268361554c565b9150617226826171bf565b604082019050919050565b6000602082019050818103600083015261724a8161720e565b9050919050565b600081905092915050565b6000617267826160b3565b6172718185617251565b935061728181856020860161555d565b80840191505092915050565b6000617299828461725c565b915081905092915050565b60006040820190506172b96000830185615323565b6172c6602083018461622c565b9392505050565b600080fd5b6172db81615a73565b81146172e657600080fd5b50565b6000813590506172f8816172d2565b92915050565b61730781615a90565b811461731257600080fd5b50565b600081359050617324816172fe565b92915050565b61733381615ada565b811461733e57600080fd5b50565b6000813590506173508161732a565b92915050565b6000610100828403121561736d5761736c6172cd565b5b6173786101006156e0565b90506000617388848285016161d7565b600083015250602061739c848285016161d7565b60208301525060406173b0848285016161d7565b60408301525060606173c4848285016172e9565b60608301525060806173d884828501617315565b60808301525060a06173ec84828501617315565b60a08301525060c061740084828501615298565b60c08301525060e061741484828501617341565b60e08301525092915050565b6000610100828403121561743757617436615245565b5b600061744584828501617356565b91505092915050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006174aa602b8361554c565b91506174b58261744e565b604082019050919050565b600060208201905081810360008301526174d98161749d565b9050919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000617516601783616c87565b9150617521826174e0565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000617562601183616c87565b915061756d8261752c565b601182019050919050565b600061758382617509565b915061758f8285616c92565b915061759a82617555565b91506175a68284616c92565b91508190509392505050565b600082825260208201905092915050565b60006175ce826160b3565b6175d881856175b2565b93506175e881856020860161555d565b6175f181615587565b840191505092915050565b600060a0820190506176116000830188615e92565b61761e6020830187615e92565b81810360408301526176308186615d52565b905081810360608301526176448185615d52565b9050818103608083015261765881846175c3565b90509695505050505050565b60008151905061767381615379565b92915050565b60006020828403121561768f5761768e615245565b5b600061769d84828501617664565b91505092915050565b60008160e01c9050919050565b600060033d11156176d25760046000803e6176cf6000516176a6565b90505b90565b600060443d10617762576176e761523b565b60043d036004823e80513d602482011167ffffffffffffffff8211171561770f575050617762565b808201805167ffffffffffffffff81111561772d5750505050617762565b80602083010160043d03850181111561774a575050505050617762565b617759826020018501866156af565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006177c160348361554c565b91506177cc82617765565b604082019050919050565b600060208201905081810360008301526177f0816177b4565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061785360288361554c565b915061785e826177f7565b604082019050919050565b6000602082019050818103600083015261788281617846565b9050919050565b6000617894826152ad565b915061789f836152ad565b92508282026178ad816152ad565b915082820484148315176178c4576178c36167eb565b5b5092915050565b60008160011c9050919050565b6000808291508390505b6001851115617922578086048111156178fe576178fd6167eb565b5b600185161561790d5780820291505b808102905061791b856178cb565b94506178e2565b94509492505050565b60008261793b57600190506179f7565b8161794957600090506179f7565b816001811461795f576002811461796957617998565b60019150506179f7565b60ff84111561797b5761797a6167eb565b5b8360020a915084821115617992576179916167eb565b5b506179f7565b5060208310610133831016604e8410600b84101617156179cd5782820a9050838111156179c8576179c76167eb565b5b6179f7565b6179da84848460016178d8565b925090508184048111156179f1576179f06167eb565b5b81810290505b9392505050565b6000617a09826152ad565b9150617a14836152ad565b9250617a417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461792b565b905092915050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000617aa560238361554c565b9150617ab082617a49565b604082019050919050565b60006020820190508181036000830152617ad481617a98565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000617b3760248361554c565b9150617b4282617adb565b604082019050919050565b60006020820190508181036000830152617b6681617b2a565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000617ba360148361554c565b9150617bae82617b6d565b602082019050919050565b60006020820190508181036000830152617bd281617b96565b9050919050565b600060a082019050617bee6000830188615e92565b617bfb6020830187615e92565b617c086040830186615323565b617c156060830185615323565b8181036080830152617c2781846175c3565b90509695505050505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302617c957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82617c58565b617c9f8683617c58565b95508019841693508086168417925050509392505050565b6000617cd2617ccd617cc8846152ad565b6166c0565b6152ad565b9050919050565b6000819050919050565b617cec83617cb7565b617d00617cf882617cd9565b848454617c65565b825550505050565b600090565b617d15617d08565b617d20818484617ce3565b505050565b5b81811015617d4457617d39600082617d0d565b600181019050617d26565b5050565b601f821115617d8957617d5a81617c33565b617d6384617c48565b81016020851015617d72578190505b617d86617d7e85617c48565b830182617d25565b50505b505050565b600082821c905092915050565b6000617dac60001984600802617d8e565b1980831691505092915050565b6000617dc58383617d9b565b9150826002028217905092915050565b617dde82615541565b67ffffffffffffffff811115617df757617df6615680565b5b617e01825461678b565b617e0c828285617d48565b600060209050601f831160018114617e3f5760008415617e2d578287015190505b617e378582617db9565b865550617e9f565b601f198416617e4d86617c33565b60005b82811015617e7557848901518255600182019150602085019450602081019050617e50565b86831015617e925784890151617e8e601f891682617d9b565b8355505b6001600288020188555050505b505050505050565b6000617eb2826152ad565b915060008203617ec557617ec46167eb565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000617f0660208361554c565b9150617f1182617ed0565b602082019050919050565b60006020820190508181036000830152617f3581617ef9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000617f76826152ad565b9150617f81836152ad565b925082617f9157617f90617f3c565b5b828206905092915050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000617ff860288361554c565b915061800382617f9c565b604082019050919050565b6000602082019050818103600083015261802781617feb565b9050919050565b61803781615a90565b82525050565b6000604082019050618052600083018561802e565b61805f602083018461802e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204ea3a71f2e7477e31ea37cfdc28b047c661f6a7c494e90c6e39ba0520fe1e5b964736f6c63430008110033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e25760003560e01c8062fdd58e146101e757806301ffc9a71461021757806304bcaa68146102475780630e89341c14610263578063248a9ca3146102935780632eb2c2d6146102c35780632f2ff15d146102df57806334697f45146102fb57806336568abe14610317578063366a4120146103335780633d932dfb1461034f5780633f4ba83a1461037f57806342c6281d146103895780634e1273f4146103b95780634f558e79146103e95780634fac7e41146104195780635c975abb146104495780636b425fc814610467578063789e8cdf146104835780638456cb59146104b35780639010d07c146104bd57806391d14854146104ed57806393ae796d1461051d578063964eec7014610539578063a217fddf14610557578063a22cb46514610575578063ac28af2414610591578063ac9650d8146105af578063b3eeaf36146105df578063b776d333146105fb578063bd85b0391461062b578063c48c01051461065b578063ca15c87314610679578063ca965357146106a9578063d547741f146106c5578063e63ab1e9146106e1578063e7334fe5146106ff578063e7f78c721461071d578063e985e9c51461073b578063f242432a1461076b578063f62d188814610787575b600080fd5b61020160048036038101906101fc91906152e3565b6107a3565b60405161020e9190615332565b60405180910390f35b610231600480360381019061022c91906153a5565b61086c565b60405161023e91906153ed565b60405180910390f35b610261600480360381019061025c919061546d565b61087e565b005b61027d60048036038101906102789190615514565b610a7d565b60405161028a91906155d1565b60405180910390f35b6102ad60048036038101906102a89190615629565b610b11565b6040516102ba9190615665565b60405180910390f35b6102dd60048036038101906102d89190615873565b610b31565b005b6102f960048036038101906102f49190615942565b610bd4565b005b61031560048036038101906103109190615982565b610bf5565b005b610331600480360381019061032c9190615942565b610d6f565b005b61034d60048036038101906103489190615a17565b610df2565b005b61036960048036038101906103649190615514565b610feb565b6040516103769190615332565b60405180910390f35b610387611009565b005b6103a3600480360381019061039e9190615514565b61103e565b6040516103b09190615b9b565b60405180910390f35b6103d360048036038101906103ce9190615c7a565b611056565b6040516103e09190615db0565b60405180910390f35b61040360048036038101906103fe9190615514565b61116f565b60405161041091906153ed565b60405180910390f35b610433600480360381019061042e9190615dd2565b611183565b6040516104409190615db0565b60405180910390f35b6104516111d4565b60405161045e91906153ed565b60405180910390f35b610481600480360381019061047c9190615dff565b6111eb565b005b61049d60048036038101906104989190615dd2565b611347565b6040516104aa9190615332565b60405180910390f35b6104bb611398565b005b6104d760048036038101906104d29190615e52565b6113cd565b6040516104e49190615ea1565b60405180910390f35b61050760048036038101906105029190615942565b6113fd565b60405161051491906153ed565b60405180910390f35b61053760048036038101906105329190615f38565b611468565b005b61054161153f565b60405161054e9190615332565b60405180910390f35b61055f61154a565b60405161056c9190615665565b60405180910390f35b61058f600480360381019061058a9190615fa4565b611551565b005b61059961156f565b6040516105a69190615665565b60405180910390f35b6105c960048036038101906105c4919061603a565b611593565b6040516105d6919061619e565b60405180910390f35b6105f960048036038101906105f491906161ec565b61169f565b005b61061560048036038101906106109190615514565b6116c3565b604051610622919061623b565b60405180910390f35b61064560048036038101906106409190615514565b611702565b6040516106529190615332565b60405180910390f35b61066361171f565b6040516106709190615665565b60405180910390f35b610693600480360381019061068e9190615629565b611743565b6040516106a09190615332565b60405180910390f35b6106c360048036038101906106be91906162ad565b611768565b005b6106df60048036038101906106da9190615942565b6119f2565b005b6106e9611a13565b6040516106f69190615665565b60405180910390f35b610707611a37565b6040516107149190615ea1565b60405180910390f35b610725611a62565b6040516107329190615ea1565b60405180910390f35b6107556004803603810190610750919061637c565b611a8d565b60405161076291906153ed565b60405180910390f35b610785600480360381019061078091906163bc565b611b21565b005b6107a1600480360381019061079c91906164f4565b611bc4565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080a906165af565b60405180910390fd5b6097600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061087782611e02565b9050919050565b7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb6108a881611e7c565b61019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a91906165e4565b828473ffffffffffffffffffffffffffffffffffffffff167fdac31445436d97d820b8ffd065c1e725892600c2407efafdfeea08b5ea4b1ed88a8a8a8a604051610987949392919061667b565b60405180910390a4610a7461099a611e90565b61019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600088886000806000604051602001610a60969594939291906166fb565b604051602081830303815290604052611e98565b50505050505050565b606060998054610a8c9061678b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab89061678b565b8015610b055780601f10610ada57610100808354040283529160200191610b05565b820191906000526020600020905b815481529060010190602001808311610ae857829003601f168201915b50505050509050919050565b600060fb6000838152602001908152602001600020600101549050919050565b61019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b73611e90565b73ffffffffffffffffffffffffffffffffffffffff1614610bc0576040517fece8527800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bcd85858585856121bc565b5050505050565b610bdd82610b11565b610be681611e7c565b610bf0838361225d565b505050565b7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb610c1f81611e7c565b60005b83839050811015610cc95760006101946000868685818110610c4757610c466167bc565b5b9050602002013581526020019081526020016000205403610cb857838382818110610c7557610c746167bc565b5b905060200201356040517fac0522ad000000000000000000000000000000000000000000000000000000008152600401610caf9190615332565b60405180910390fd5b80610cc29061681a565b9050610c22565b50610d6786848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060405180602001604052806000815250612273565b505050505050565b610d77611e90565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb906168d4565b60405180910390fd5b610dee82826124a0565b5050565b7f88f3509f0e42391f2d94ebfb2a37cbd0782b1b8f73715330017f4663290b8117610e1c81611e7c565b600080610e31610e2b866124b6565b866107a3565b90506000811115610e64576000610e4885836124cc565b9050610e5486826124e5565b8083610e6091906168f4565b9250505b83821015610fe4576000610ee63073ffffffffffffffffffffffffffffffffffffffff1663e7334fe56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee0919061693d565b876107a3565b90506000811115610f24576000610f088487610f02919061696a565b836124cc565b9050610f148782612551565b8084610f2091906168f4565b9350505b84831015610fe2576000610fa63073ffffffffffffffffffffffffffffffffffffffff1663e7f78c726040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa0919061693d565b886107a3565b1115610fe15760008386610fba919061696a565b9050610fd1878588610fcc919061696a565b612719565b8084610fdd91906168f4565b9350505b5b505b5050505050565b60006101946000838152602001908152602001600020549050919050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61103381611e7c565b61103b612879565b50565b61104661518b565b61104f826128dc565b9050919050565b6060815183511461109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109390616a10565b60405180910390fd5b6000835167ffffffffffffffff8111156110b9576110b8615680565b5b6040519080825280602002602001820160405280156110e75781602001602082028036833780820191505090505b50905060005b84518110156111645761113485828151811061110c5761110b6167bc565b5b6020026020010151858381518110611127576111266167bc565b5b60200260200101516107a3565b828281518110611147576111466167bc565b5b6020026020010181815250508061115d9061681a565b90506110ed565b508091505092915050565b60008061117b83611702565b119050919050565b60606111cd61019560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206129d0565b9050919050565b6000603360009054906101000a900460ff16905090565b7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb61121581611e7c565b61019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806112c0575061019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b1561130257826040517f4a7a53580000000000000000000000000000000000000000000000000000000081526004016112f99190615332565b60405180910390fd5b6113418461019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168585604051806020016040528060008152506129f1565b50505050565b600061139161019560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c8f565b9050919050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6113c281611e7c565b6113ca612ca4565b50565b60006113f58261012d6000868152602001908152602001600020612d0790919063ffffffff16565b905092915050565b600060fb600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611470612d21565b6000801b61147d81611e7c565b8261019160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508161019260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa948457069516ab10917665b0b5d6b8043d77b39f57ca760ef0d3d41042775478383604051611532929190616aa6565b60405180910390a1505050565b600061019654905090565b6000801b81565b611559612d21565b61156b611564611e90565b8383612d6b565b5050565b7f88f3509f0e42391f2d94ebfb2a37cbd0782b1b8f73715330017f4663290b811781565b60608282905067ffffffffffffffff8111156115b2576115b1615680565b5b6040519080825280602002602001820160405280156115e557816020015b60608152602001906001900390816115d05790505b50905060005b83839050811015611698576116673085858481811061160d5761160c6167bc565b5b905060200281019061161f9190616ade565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612ed7565b82828151811061167a576116796167bc565b5b602002602001018190525080806116909061681a565b9150506115eb565b5092915050565b6116a7612d21565b6000801b6116b481611e7c565b6116be8383612fbb565b505050565b60006101936000610194600085815260200190815260200160002054815260200190815260200160002060009054906101000a900460ff169050919050565b600060c96000838152602001908152602001600020549050919050565b7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb81565b600061176161012d600084815260200190815260200160002061306e565b9050919050565b7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb61179281611e7c565b600061179f878787613083565b90506117ab8584612fbb565b6118078a828b8b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060405180602001604052806000815250612273565b600061019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385d3d64b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611877573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189b919061693d565b90508073ffffffffffffffffffffffffffffffffffffffff1663a4b186f8876040518263ffffffff1660e01b81526004016118d69190615332565b602060405180830381865afa1580156118f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119179190616b56565b6119e5578073ffffffffffffffffffffffffffffffffffffffff166355135b6787878b8b600081811061194d5761194c6167bc565b5b9050610100020160200160208101906119669190616b83565b8c8c600081811061197a576119796167bc565b5b9050610100020160400160208101906119939190616b83565b6040518563ffffffff1660e01b81526004016119b29493929190616bb0565b600060405180830381600087803b1580156119cc57600080fd5b505af11580156119e0573d6000803e3d6000fd5b505050505b5050505050505050505050565b6119fb82610b11565b611a0481611e7c565b611a0e83836124a0565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b600061019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000609860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b63611e90565b73ffffffffffffffffffffffffffffffffffffffff1614611bb0576040517fece8527800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bbd858585858561315b565b5050505050565b60008060019054906101000a900460ff16159050808015611bf55750600160008054906101000a900460ff1660ff16105b80611c225750611c04306131fc565b158015611c215750600160008054906101000a900460ff1660ff16145b5b611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890616c67565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611c9e576001600060016101000a81548160ff0219169083151502179055505b611ca661321f565b611cae613270565b611cd682604051602001611cc29190616d0f565b6040516020818303038152906040526132c1565b611cde61331c565b611ce6613388565b611cee6133d9565b611cf661342a565b611cfe61347b565b611d126000801b611d0d611e90565b61225d565b611d437f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611d3e611e90565b61225d565b611d747fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb611d6f611e90565b61225d565b611da57f88f3509f0e42391f2d94ebfb2a37cbd0782b1b8f73715330017f4663290b8117611da0611e90565b61225d565b8015611dfe5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611df59190616d6c565b60405180910390a15b5050565b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e755750611e74826134cc565b5b9050919050565b611e8d81611e88611e90565b613546565b50565b600033905090565b8151835114611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390616df9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290616e8b565b60405180910390fd5b6000611f55611e90565b9050611f658187878787876135cb565b60005b8451811015612119576000858281518110611f8657611f856167bc565b5b602002602001015190506000858381518110611fa557611fa46167bc565b5b6020026020010151905060006097600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e90616f1d565b60405180910390fd5b8181036097600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816097600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120fe91906168f4565b92505081905550505050806121129061681a565b9050611f68565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612190929190616f3d565b60405180910390a46121a6818787878787613935565b6121b4818787878787613956565b505050505050565b6121c4611e90565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061220a575061220985612204611e90565b611a8d565b5b612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224090616fe6565b60405180910390fd5b6122568585858585611e98565b5050505050565b612265612d21565b61226f8282613b2d565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036122e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d990617078565b60405180910390fd5b8151835114612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d90616df9565b60405180910390fd5b6000612330611e90565b9050612341816000878787876135cb565b60005b84518110156123fb578381815181106123605761235f6167bc565b5b60200260200101516097600087848151811061237f5761237e6167bc565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123e191906168f4565b9250508190555080806123f39061681a565b915050612344565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612473929190616f3d565b60405180910390a461248a81600087878787613935565b61249981600087878787613956565b5050505050565b6124a8612d21565b6124b28282613b62565b5050565b60006124c58260146004613b97565b9050919050565b60008183106124db57816124dd565b825b905092915050565b60006124f0836124b6565b90506124fd818484613bfb565b8073ffffffffffffffffffffffffffffffffffffffff16837fa76ba9683000f0598aec5ed73132d1bdb673107c3e609fcbff0dfb9296467c43846040516125449190615332565b60405180910390a3505050565b6125ca3073ffffffffffffffffffffffffffffffffffffffff1663e7334fe56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c3919061693d565b8383613bfb565b61019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337bdc99b836040518263ffffffff1660e01b81526004016126269190615332565b600060405180830381600087803b15801561264057600080fd5b505af1158015612654573d6000803e3d6000fd5b505050503073ffffffffffffffffffffffffffffffffffffffff1663e7334fe56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c7919061693d565b73ffffffffffffffffffffffffffffffffffffffff16827fa76ba9683000f0598aec5ed73132d1bdb673107c3e609fcbff0dfb9296467c438360405161270d9190615332565b60405180910390a35050565b60003073ffffffffffffffffffffffffffffffffffffffff1663e7f78c726040518163ffffffff1660e01b8152600401602060405180830381865afa158015612766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278a919061693d565b9050612797818484613bfb565b61019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379fcc08a836040518263ffffffff1660e01b81526004016127f39190615332565b600060405180830381600087803b15801561280d57600080fd5b505af1158015612821573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16837fa76ba9683000f0598aec5ed73132d1bdb673107c3e609fcbff0dfb9296467c438460405161286c9190615332565b60405180910390a3505050565b612881613e43565b6000603360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128c5611e90565b6040516128d29190615ea1565b60405180910390a1565b6128e461518b565b6040518061010001604052806128f984613e8c565b60ff16815260200161290a84613ea2565b60ff16815260200161291b84613ebc565b60ff16815260200161292c84613ed5565b61ffff16815260200161293e84613eeb565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200161296d84613f04565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200161299c846124b6565b73ffffffffffffffffffffffffffffffffffffffff1681526020016129c084613f1d565b63ffffffff168152509050919050565b606060006129e083600001613f33565b905060608190508092505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5790616e8b565b60405180910390fd5b6000612a6a611e90565b90506000612a7785613f8f565b90506000612a8485613f8f565b9050612a948389898585896135cb565b60006097600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2390616f1d565b60405180910390fd5b8581036097600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856097600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612be391906168f4565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612c60929190617098565b60405180910390a4612c76848a8a86868a613935565b612c84848a8a8a8a8a614009565b505050505050505050565b6000612c9d826000016141e0565b9050919050565b612cac612d21565b6001603360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612cf0611e90565b604051612cfd9190615ea1565b60405180910390a1565b6000612d1683600001836141f1565b60001c905092915050565b612d296111d4565b15612d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d609061710d565b60405180910390fd5b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd09061719f565b60405180910390fd5b80609860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612eca91906153ed565b60405180910390a3505050565b6060612ee2836131fc565b612f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1890617231565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1684604051612f49919061728d565b600060405180830381855af49150503d8060008114612f84576040519150601f19603f3d011682016040523d82523d6000602084013e612f89565b606091505b5091509150612fb182826040518060600160405280602781526020016180966027913961421c565b9250505092915050565b60648160ff16111561300457806040517fe9cf3fea000000000000000000000000000000000000000000000000000000008152600401612ffb919061623b565b60405180910390fd5b80610193600084815260200190815260200160002060006101000a81548160ff021916908360ff1602179055507fa08477ae79c0fbe93cf684988c5b96bfec3bf0e18cba76ebdaa7074eaf8be74782826040516130629291906172a4565b60405180910390a15050565b600061307c826000016141e0565b9050919050565b606060008484905067ffffffffffffffff8111156130a4576130a3615680565b5b6040519080825280602002602001820160405280156130d25781602001602082028036833780820191505090505b50905060005b8585905081101561314f5760006131178787848181106130fb576130fa6167bc565b5b905061010002018036038101906131129190617420565b61423e565b90506131238186614330565b80838381518110613137576131366167bc565b5b602002602001018181525050508060010190506130d8565b50809150509392505050565b613163611e90565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806131a957506131a8856131a3611e90565b611a8d565b5b6131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df90616fe6565b60405180910390fd5b6131f585858585856129f1565b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff1661326e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613265906174c0565b60405180910390fd5b565b600060019054906101000a900460ff166132bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b6906174c0565b60405180910390fd5b565b600060019054906101000a900460ff16613310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613307906174c0565b60405180910390fd5b61331981614356565b50565b600060019054906101000a900460ff1661336b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613362906174c0565b60405180910390fd5b6000603360006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff166133d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ce906174c0565b60405180910390fd5b565b600060019054906101000a900460ff16613428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341f906174c0565b60405180910390fd5b565b600060019054906101000a900460ff16613479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613470906174c0565b60405180910390fd5b565b600060019054906101000a900460ff166134ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c1906174c0565b60405180910390fd5b565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061353f575061353e82614369565b5b9050919050565b61355082826113fd565b6135c75761355d8161444b565b61356b8360001c6020614478565b60405160200161357c929190617578565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135be91906155d1565b60405180910390fd5b5050565b6135d3612d21565b600061019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148061368a57508173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806136c15750600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b8061376157506136f87fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb6136f3611e90565b6113fd565b801561376057508173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148061375f575061375e7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb886113fd565b5b5b5b905060008651905060005b8181101561391a576000888281518110613789576137886167bc565b5b6020026020010151905060008883815181106137a8576137a76167bc565b5b602002602001015190506137bc818c6146b4565b6137f2576040517fece8527800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16036138405780610196600082825461383891906168f4565b925050819055505b8673ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff160361388e57806101966000828254613886919061696a565b925050819055505b841580156138d057506138a0826124b6565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614155b15613907576040517fece8527800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050806139139061681a565b905061376c565b506139298a8a8a8a8a8a6147a9565b50505050505050505050565b613940858585614979565b61394e868686868686614aea565b505050505050565b6139758473ffffffffffffffffffffffffffffffffffffffff166131fc565b15613b25578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016139bb9594939291906175fc565b6020604051808303816000875af19250505080156139f757506040513d601f19601f820116820180604052508101906139f49190617679565b60015b613a9c57613a036176b3565b806308c379a003613a5f5750613a176176d5565b80613a225750613a61565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5691906155d1565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a93906177d7565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1a90617869565b60405180910390fd5b505b505050505050565b613b378282614af2565b613b5d8161012d6000858152602001908152602001600020614bd390919063ffffffff16565b505050565b613b6c8282614c03565b613b928161012d6000858152602001908152602001600020614ce590919063ffffffff16565b505050565b600080600883613ba79190617889565b6001600886613bb69190617889565b6002613bc291906179fe565b613bcc919061696a565b60001b901b90506000818660001b169050600884613bea9190617889565b81901c60001c925050509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6190617abb565b60405180910390fd5b6000613c74611e90565b90506000613c8184613f8f565b90506000613c8e84613f8f565b9050613cae838760008585604051806020016040528060008152506135cb565b60006097600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015613d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d3d90617b4d565b60405180910390fd5b8481036097600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051613e14929190617098565b60405180910390a4613e3a84886000868660405180602001604052806000815250613935565b50505050505050565b613e4b6111d4565b613e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e8190617bb9565b60405180910390fd5b565b6000613e9b826001601f613b97565b9050919050565b60006004613eb3836001601e613b97565b901c9050919050565b6000600f613ecd836001601e613b97565b169050919050565b6000613ee4826002601c613b97565b9050919050565b6000613efa826002601a613b97565b60f01b9050919050565b6000613f138260026018613b97565b60f01b9050919050565b6000613f2c8260046000613b97565b9050919050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613f8357602002820191906000526020600020905b815481526020019060010190808311613f6f575b50505050509050919050565b60606000600167ffffffffffffffff811115613fae57613fad615680565b5b604051908082528060200260200182016040528015613fdc5781602001602082028036833780820191505090505b5090508281600081518110613ff457613ff36167bc565b5b60200260200101818152505080915050919050565b6140288473ffffffffffffffffffffffffffffffffffffffff166131fc565b156141d8578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161406e959493929190617bd9565b6020604051808303816000875af19250505080156140aa57506040513d601f19601f820116820180604052508101906140a79190617679565b60015b61414f576140b66176b3565b806308c379a00361411257506140ca6176d5565b806140d55750614114565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410991906155d1565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614146906177d7565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146141d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141cd90617869565b60405180910390fd5b505b505050505050565b600081600001805490509050919050565b6000826000018281548110614209576142086167bc565b5b9060005260206000200154905092915050565b6060831561422c57829050614237565b6142368383614d15565b5b9392505050565b600061424982614d65565b600082604001516004846020015160ff16901b1760ff169050600860006142709190617889565b8360e0015163ffffffff16901b6008600461428b9190617889565b8460c0015173ffffffffffffffffffffffffffffffffffffffff16901b600860186142b69190617889565b8560a0015160f01c61ffff16901b6008601a6142d29190617889565b866080015160f01c61ffff16901b6008601c6142ee9190617889565b876060015161ffff16901b6008601e6143079190617889565b86901b6008601f6143189190617889565b896000015160ff16901b171717171717915050919050565b61433982614ec7565b806101946000848152602001908152602001600020819055505050565b80609990816143659190617dd5565b5050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061443457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80614444575061444382614f18565b5b9050919050565b60606144718273ffffffffffffffffffffffffffffffffffffffff16601460ff16614478565b9050919050565b60606000600283600261448b9190617889565b61449591906168f4565b67ffffffffffffffff8111156144ae576144ad615680565b5b6040519080825280601f01601f1916602001820160405280156144e05781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110614518576145176167bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061457c5761457b6167bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026145bc9190617889565b6145c691906168f4565b90505b6001811115614666577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110614608576146076167bc565b5b1a60f81b82828151811061461f5761461e6167bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061465f90617ea7565b90506145c9565b50600084146146aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146a190617f1c565b60405180910390fd5b8091505092915050565b600061019160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480614761575061019260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61477f576000655af3107a4000846147799190617f6b565b146147a1565b6000831180156147a057506000655af3107a40008461479e9190617f6b565b145b5b905092915050565b6147b7868686868686614f82565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036148685760005b83518110156148665782818151811061480a576148096167bc565b5b602002602001015160c96000868481518110614829576148286167bc565b5b60200260200101518152602001908152602001600020600082825461484e91906168f4565b925050819055508061485f9061681a565b90506147ee565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036149715760005b835181101561496f5760008482815181106148bd576148bc6167bc565b5b6020026020010151905060008483815181106148dc576148db6167bc565b5b60200260200101519050600060c9600084815260200190815260200160002054905081811015614941576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016149389061800e565b60405180910390fd5b81810360c9600085815260200190815260200160002081905550505050806149689061681a565b905061489f565b505b505050505050565b600061019560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061019560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008351905060005b81811015614ae1576000858281518110614a2757614a266167bc565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614614a8c576000614a7189836107a3565b03614a8b57614a898185614f8a90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614614ad557614ad38186614fa490919063ffffffff16565b505b50806001019050614a0a565b50505050505050565b505050505050565b614afc82826113fd565b614bcf57600160fb600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550614b74611e90565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000614bfb836000018373ffffffffffffffffffffffffffffffffffffffff1660001b614fbe565b905092915050565b614c0d82826113fd565b15614ce157600060fb600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550614c86611e90565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000614d0d836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61502e565b905092915050565b600082511115614d285781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614d5c91906155d1565b60405180910390fd5b6000816000015160ff1614614db55780600001516040517ff981da6c000000000000000000000000000000000000000000000000000000008152600401614dac919061623b565b60405180910390fd5b600f816040015160ff161115614e065780604001516040517f4962a53a000000000000000000000000000000000000000000000000000000008152600401614dfd919061623b565b60405180910390fd5b600f816020015160ff161115614e575780602001516040517f46ac6e0f000000000000000000000000000000000000000000000000000000008152600401614e4e919061623b565b60405180910390fd5b614e648160800151615142565b8015614e795750614e788160a00151615142565b5b614ec45780608001518160a001516040517f81036ebb000000000000000000000000000000000000000000000000000000008152600401614ebb92919061803d565b60405180910390fd5b50565b600061019460008381526020019081526020016000205414614f15576040517f5cb045db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b6000614f9c836000018360001b61502e565b905092915050565b6000614fb6836000018360001b614fbe565b905092915050565b6000614fca8383615168565b615023578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050615028565b600090505b92915050565b60008083600101600084815260200190815260200160002054905060008114615136576000600182615060919061696a565b9050600060018660000180549050615078919061696a565b90508181146150e7576000866000018281548110615099576150986167bc565b5b90600052602060002001549050808760000184815481106150bd576150bc6167bc565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b856000018054806150fb576150fa618066565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061513c565b60009150505b92915050565b60008160001a8260011a60408111605b82101660408311605b8410161692505050919050565b600080836001016000848152602001908152602001600020541415905092915050565b604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600061ffff16815260200160007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200160007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600063ffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061527a8261524f565b9050919050565b61528a8161526f565b811461529557600080fd5b50565b6000813590506152a781615281565b92915050565b6000819050919050565b6152c0816152ad565b81146152cb57600080fd5b50565b6000813590506152dd816152b7565b92915050565b600080604083850312156152fa576152f9615245565b5b600061530885828601615298565b9250506020615319858286016152ce565b9150509250929050565b61532c816152ad565b82525050565b60006020820190506153476000830184615323565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6153828161534d565b811461538d57600080fd5b50565b60008135905061539f81615379565b92915050565b6000602082840312156153bb576153ba615245565b5b60006153c984828501615390565b91505092915050565b60008115159050919050565b6153e7816153d2565b82525050565b600060208201905061540260008301846153de565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261542d5761542c615408565b5b8235905067ffffffffffffffff81111561544a5761544961540d565b5b60208301915083602082028301111561546657615465615412565b5b9250929050565b6000806000806000806080878903121561548a57615489615245565b5b600087013567ffffffffffffffff8111156154a8576154a761524a565b5b6154b489828a01615417565b9650965050602087013567ffffffffffffffff8111156154d7576154d661524a565b5b6154e389828a01615417565b945094505060406154f689828a01615298565b925050606061550789828a016152ce565b9150509295509295509295565b60006020828403121561552a57615529615245565b5b6000615538848285016152ce565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561557b578082015181840152602081019050615560565b60008484015250505050565b6000601f19601f8301169050919050565b60006155a382615541565b6155ad818561554c565b93506155bd81856020860161555d565b6155c681615587565b840191505092915050565b600060208201905081810360008301526155eb8184615598565b905092915050565b6000819050919050565b615606816155f3565b811461561157600080fd5b50565b600081359050615623816155fd565b92915050565b60006020828403121561563f5761563e615245565b5b600061564d84828501615614565b91505092915050565b61565f816155f3565b82525050565b600060208201905061567a6000830184615656565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6156b882615587565b810181811067ffffffffffffffff821117156156d7576156d6615680565b5b80604052505050565b60006156ea61523b565b90506156f682826156af565b919050565b600067ffffffffffffffff82111561571657615715615680565b5b602082029050602081019050919050565b600061573a615735846156fb565b6156e0565b9050808382526020820190506020840283018581111561575d5761575c615412565b5b835b81811015615786578061577288826152ce565b84526020840193505060208101905061575f565b5050509392505050565b600082601f8301126157a5576157a4615408565b5b81356157b5848260208601615727565b91505092915050565b600080fd5b600067ffffffffffffffff8211156157de576157dd615680565b5b6157e782615587565b9050602081019050919050565b82818337600083830152505050565b6000615816615811846157c3565b6156e0565b905082815260208101848484011115615832576158316157be565b5b61583d8482856157f4565b509392505050565b600082601f83011261585a57615859615408565b5b813561586a848260208601615803565b91505092915050565b600080600080600060a0868803121561588f5761588e615245565b5b600061589d88828901615298565b95505060206158ae88828901615298565b945050604086013567ffffffffffffffff8111156158cf576158ce61524a565b5b6158db88828901615790565b935050606086013567ffffffffffffffff8111156158fc576158fb61524a565b5b61590888828901615790565b925050608086013567ffffffffffffffff8111156159295761592861524a565b5b61593588828901615845565b9150509295509295909350565b6000806040838503121561595957615958615245565b5b600061596785828601615614565b925050602061597885828601615298565b9150509250929050565b60008060008060006060868803121561599e5761599d615245565b5b60006159ac88828901615298565b955050602086013567ffffffffffffffff8111156159cd576159cc61524a565b5b6159d988828901615417565b9450945050604086013567ffffffffffffffff8111156159fc576159fb61524a565b5b615a0888828901615417565b92509250509295509295909350565b60008060408385031215615a2e57615a2d615245565b5b6000615a3c858286016152ce565b9250506020615a4d858286016152ce565b9150509250929050565b600060ff82169050919050565b615a6d81615a57565b82525050565b600061ffff82169050919050565b615a8a81615a73565b82525050565b60007fffff00000000000000000000000000000000000000000000000000000000000082169050919050565b615ac581615a90565b82525050565b615ad48161526f565b82525050565b600063ffffffff82169050919050565b615af381615ada565b82525050565b61010082016000820151615b106000850182615a64565b506020820151615b236020850182615a64565b506040820151615b366040850182615a64565b506060820151615b496060850182615a81565b506080820151615b5c6080850182615abc565b5060a0820151615b6f60a0850182615abc565b5060c0820151615b8260c0850182615acb565b5060e0820151615b9560e0850182615aea565b50505050565b600061010082019050615bb16000830184615af9565b92915050565b600067ffffffffffffffff821115615bd257615bd1615680565b5b602082029050602081019050919050565b6000615bf6615bf184615bb7565b6156e0565b90508083825260208201905060208402830185811115615c1957615c18615412565b5b835b81811015615c425780615c2e8882615298565b845260208401935050602081019050615c1b565b5050509392505050565b600082601f830112615c6157615c60615408565b5b8135615c71848260208601615be3565b91505092915050565b60008060408385031215615c9157615c90615245565b5b600083013567ffffffffffffffff811115615caf57615cae61524a565b5b615cbb85828601615c4c565b925050602083013567ffffffffffffffff811115615cdc57615cdb61524a565b5b615ce885828601615790565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d27816152ad565b82525050565b6000615d398383615d1e565b60208301905092915050565b6000602082019050919050565b6000615d5d82615cf2565b615d678185615cfd565b9350615d7283615d0e565b8060005b83811015615da3578151615d8a8882615d2d565b9750615d9583615d45565b925050600181019050615d76565b5085935050505092915050565b60006020820190508181036000830152615dca8184615d52565b905092915050565b600060208284031215615de857615de7615245565b5b6000615df684828501615298565b91505092915050565b600080600060608486031215615e1857615e17615245565b5b6000615e2686828701615298565b9350506020615e37868287016152ce565b9250506040615e48868287016152ce565b9150509250925092565b60008060408385031215615e6957615e68615245565b5b6000615e7785828601615614565b9250506020615e88858286016152ce565b9150509250929050565b615e9b8161526f565b82525050565b6000602082019050615eb66000830184615e92565b92915050565b6000615ec78261526f565b9050919050565b615ed781615ebc565b8114615ee257600080fd5b50565b600081359050615ef481615ece565b92915050565b6000615f058261526f565b9050919050565b615f1581615efa565b8114615f2057600080fd5b50565b600081359050615f3281615f0c565b92915050565b60008060408385031215615f4f57615f4e615245565b5b6000615f5d85828601615ee5565b9250506020615f6e85828601615f23565b9150509250929050565b615f81816153d2565b8114615f8c57600080fd5b50565b600081359050615f9e81615f78565b92915050565b60008060408385031215615fbb57615fba615245565b5b6000615fc985828601615298565b9250506020615fda85828601615f8f565b9150509250929050565b60008083601f840112615ffa57615ff9615408565b5b8235905067ffffffffffffffff8111156160175761601661540d565b5b60208301915083602082028301111561603357616032615412565b5b9250929050565b6000806020838503121561605157616050615245565b5b600083013567ffffffffffffffff81111561606f5761606e61524a565b5b61607b85828601615fe4565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60006160da826160b3565b6160e481856160be565b93506160f481856020860161555d565b6160fd81615587565b840191505092915050565b600061611483836160cf565b905092915050565b6000602082019050919050565b600061613482616087565b61613e8185616092565b935083602082028501616150856160a3565b8060005b8581101561618c578484038952815161616d8582616108565b94506161788361611c565b925060208a01995050600181019050616154565b50829750879550505050505092915050565b600060208201905081810360008301526161b88184616129565b905092915050565b6161c981615a57565b81146161d457600080fd5b50565b6000813590506161e6816161c0565b92915050565b6000806040838503121561620357616202615245565b5b6000616211858286016152ce565b9250506020616222858286016161d7565b9150509250929050565b61623581615a57565b82525050565b6000602082019050616250600083018461622c565b92915050565b60008083601f84011261626c5761626b615408565b5b8235905067ffffffffffffffff8111156162895761628861540d565b5b602083019150836101008202830111156162a6576162a5615412565b5b9250929050565b60008060008060008060008060c0898b0312156162cd576162cc615245565b5b60006162db8b828c01615298565b985050602089013567ffffffffffffffff8111156162fc576162fb61524a565b5b6163088b828c01615417565b9750975050604089013567ffffffffffffffff81111561632b5761632a61524a565b5b6163378b828c01616256565b9550955050606061634a8b828c016152ce565b935050608061635b8b828c016152ce565b92505060a061636c8b828c016161d7565b9150509295985092959890939650565b6000806040838503121561639357616392615245565b5b60006163a185828601615298565b92505060206163b285828601615298565b9150509250929050565b600080600080600060a086880312156163d8576163d7615245565b5b60006163e688828901615298565b95505060206163f788828901615298565b9450506040616408888289016152ce565b9350506060616419888289016152ce565b925050608086013567ffffffffffffffff81111561643a5761643961524a565b5b61644688828901615845565b9150509295509295909350565b600067ffffffffffffffff82111561646e5761646d615680565b5b61647782615587565b9050602081019050919050565b600061649761649284616453565b6156e0565b9050828152602081018484840111156164b3576164b26157be565b5b6164be8482856157f4565b509392505050565b600082601f8301126164db576164da615408565b5b81356164eb848260208601616484565b91505092915050565b60006020828403121561650a57616509615245565b5b600082013567ffffffffffffffff8111156165285761652761524a565b5b616534848285016164c6565b91505092915050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000616599602a8361554c565b91506165a48261653d565b604082019050919050565b600060208201905081810360008301526165c88161658c565b9050919050565b6000815190506165de816152b7565b92915050565b6000602082840312156165fa576165f9615245565b5b6000616608848285016165cf565b91505092915050565b600080fd5b82818337505050565b600061662b8385615cfd565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561665e5761665d616611565b5b60208302925061666f838584616616565b82840190509392505050565b6000604082019050818103600083015261669681868861661f565b905081810360208301526166ab81848661661f565b905095945050505050565b6000819050919050565b6000819050919050565b60006166e56166e06166db846166b6565b6166c0565b615a57565b9050919050565b6166f5816166ca565b82525050565b600060c08201905061671060008301896153de565b61671d6020830188615e92565b61672a6040830187615323565b6167376060830186615e92565b61674460808301856166ec565b61675160a08301846166ec565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806167a357607f821691505b6020821081036167b6576167b561675c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000616825826152ad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203616857576168566167eb565b5b600182019050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006168be602f8361554c565b91506168c982616862565b604082019050919050565b600060208201905081810360008301526168ed816168b1565b9050919050565b60006168ff826152ad565b915061690a836152ad565b9250828201905080821115616922576169216167eb565b5b92915050565b60008151905061693781615281565b92915050565b60006020828403121561695357616952615245565b5b600061696184828501616928565b91505092915050565b6000616975826152ad565b9150616980836152ad565b9250828203905081811115616998576169976167eb565b5b92915050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006169fa60298361554c565b9150616a058261699e565b604082019050919050565b60006020820190508181036000830152616a29816169ed565b9050919050565b6000616a4b616a46616a418461524f565b6166c0565b61524f565b9050919050565b6000616a5d82616a30565b9050919050565b6000616a6f82616a52565b9050919050565b616a7f81616a64565b82525050565b6000616a9082616a52565b9050919050565b616aa081616a85565b82525050565b6000604082019050616abb6000830185616a76565b616ac86020830184616a97565b9392505050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112616afb57616afa616acf565b5b80840192508235915067ffffffffffffffff821115616b1d57616b1c616ad4565b5b602083019250600182023603831315616b3957616b38616ad9565b5b509250929050565b600081519050616b5081615f78565b92915050565b600060208284031215616b6c57616b6b615245565b5b6000616b7a84828501616b41565b91505092915050565b600060208284031215616b9957616b98615245565b5b6000616ba7848285016161d7565b91505092915050565b6000608082019050616bc56000830187615323565b616bd26020830186615323565b616bdf604083018561622c565b616bec606083018461622c565b95945050505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000616c51602e8361554c565b9150616c5c82616bf5565b604082019050919050565b60006020820190508181036000830152616c8081616c44565b9050919050565b600081905092915050565b6000616c9d82615541565b616ca78185616c87565b9350616cb781856020860161555d565b80840191505092915050565b7f7b69647d00000000000000000000000000000000000000000000000000000000600082015250565b6000616cf9600483616c87565b9150616d0482616cc3565b600482019050919050565b6000616d1b8284616c92565b9150616d2682616cec565b915081905092915050565b6000819050919050565b6000616d56616d51616d4c84616d31565b6166c0565b615a57565b9050919050565b616d6681616d3b565b82525050565b6000602082019050616d816000830184616d5d565b92915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000616de360288361554c565b9150616dee82616d87565b604082019050919050565b60006020820190508181036000830152616e1281616dd6565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000616e7560258361554c565b9150616e8082616e19565b604082019050919050565b60006020820190508181036000830152616ea481616e68565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000616f07602a8361554c565b9150616f1282616eab565b604082019050919050565b60006020820190508181036000830152616f3681616efa565b9050919050565b60006040820190508181036000830152616f578185615d52565b90508181036020830152616f6b8184615d52565b90509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000616fd0602e8361554c565b9150616fdb82616f74565b604082019050919050565b60006020820190508181036000830152616fff81616fc3565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061706260218361554c565b915061706d82617006565b604082019050919050565b6000602082019050818103600083015261709181617055565b9050919050565b60006040820190506170ad6000830185615323565b6170ba6020830184615323565b9392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006170f760108361554c565b9150617102826170c1565b602082019050919050565b60006020820190508181036000830152617126816170ea565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061718960298361554c565b91506171948261712d565b604082019050919050565b600060208201905081810360008301526171b88161717c565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b600061721b60268361554c565b9150617226826171bf565b604082019050919050565b6000602082019050818103600083015261724a8161720e565b9050919050565b600081905092915050565b6000617267826160b3565b6172718185617251565b935061728181856020860161555d565b80840191505092915050565b6000617299828461725c565b915081905092915050565b60006040820190506172b96000830185615323565b6172c6602083018461622c565b9392505050565b600080fd5b6172db81615a73565b81146172e657600080fd5b50565b6000813590506172f8816172d2565b92915050565b61730781615a90565b811461731257600080fd5b50565b600081359050617324816172fe565b92915050565b61733381615ada565b811461733e57600080fd5b50565b6000813590506173508161732a565b92915050565b6000610100828403121561736d5761736c6172cd565b5b6173786101006156e0565b90506000617388848285016161d7565b600083015250602061739c848285016161d7565b60208301525060406173b0848285016161d7565b60408301525060606173c4848285016172e9565b60608301525060806173d884828501617315565b60808301525060a06173ec84828501617315565b60a08301525060c061740084828501615298565b60c08301525060e061741484828501617341565b60e08301525092915050565b6000610100828403121561743757617436615245565b5b600061744584828501617356565b91505092915050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006174aa602b8361554c565b91506174b58261744e565b604082019050919050565b600060208201905081810360008301526174d98161749d565b9050919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000617516601783616c87565b9150617521826174e0565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000617562601183616c87565b915061756d8261752c565b601182019050919050565b600061758382617509565b915061758f8285616c92565b915061759a82617555565b91506175a68284616c92565b91508190509392505050565b600082825260208201905092915050565b60006175ce826160b3565b6175d881856175b2565b93506175e881856020860161555d565b6175f181615587565b840191505092915050565b600060a0820190506176116000830188615e92565b61761e6020830187615e92565b81810360408301526176308186615d52565b905081810360608301526176448185615d52565b9050818103608083015261765881846175c3565b90509695505050505050565b60008151905061767381615379565b92915050565b60006020828403121561768f5761768e615245565b5b600061769d84828501617664565b91505092915050565b60008160e01c9050919050565b600060033d11156176d25760046000803e6176cf6000516176a6565b90505b90565b600060443d10617762576176e761523b565b60043d036004823e80513d602482011167ffffffffffffffff8211171561770f575050617762565b808201805167ffffffffffffffff81111561772d5750505050617762565b80602083010160043d03850181111561774a575050505050617762565b617759826020018501866156af565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006177c160348361554c565b91506177cc82617765565b604082019050919050565b600060208201905081810360008301526177f0816177b4565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061785360288361554c565b915061785e826177f7565b604082019050919050565b6000602082019050818103600083015261788281617846565b9050919050565b6000617894826152ad565b915061789f836152ad565b92508282026178ad816152ad565b915082820484148315176178c4576178c36167eb565b5b5092915050565b60008160011c9050919050565b6000808291508390505b6001851115617922578086048111156178fe576178fd6167eb565b5b600185161561790d5780820291505b808102905061791b856178cb565b94506178e2565b94509492505050565b60008261793b57600190506179f7565b8161794957600090506179f7565b816001811461795f576002811461796957617998565b60019150506179f7565b60ff84111561797b5761797a6167eb565b5b8360020a915084821115617992576179916167eb565b5b506179f7565b5060208310610133831016604e8410600b84101617156179cd5782820a9050838111156179c8576179c76167eb565b5b6179f7565b6179da84848460016178d8565b925090508184048111156179f1576179f06167eb565b5b81810290505b9392505050565b6000617a09826152ad565b9150617a14836152ad565b9250617a417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461792b565b905092915050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000617aa560238361554c565b9150617ab082617a49565b604082019050919050565b60006020820190508181036000830152617ad481617a98565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000617b3760248361554c565b9150617b4282617adb565b604082019050919050565b60006020820190508181036000830152617b6681617b2a565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000617ba360148361554c565b9150617bae82617b6d565b602082019050919050565b60006020820190508181036000830152617bd281617b96565b9050919050565b600060a082019050617bee6000830188615e92565b617bfb6020830187615e92565b617c086040830186615323565b617c156060830185615323565b8181036080830152617c2781846175c3565b90509695505050505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302617c957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82617c58565b617c9f8683617c58565b95508019841693508086168417925050509392505050565b6000617cd2617ccd617cc8846152ad565b6166c0565b6152ad565b9050919050565b6000819050919050565b617cec83617cb7565b617d00617cf882617cd9565b848454617c65565b825550505050565b600090565b617d15617d08565b617d20818484617ce3565b505050565b5b81811015617d4457617d39600082617d0d565b600181019050617d26565b5050565b601f821115617d8957617d5a81617c33565b617d6384617c48565b81016020851015617d72578190505b617d86617d7e85617c48565b830182617d25565b50505b505050565b600082821c905092915050565b6000617dac60001984600802617d8e565b1980831691505092915050565b6000617dc58383617d9b565b9150826002028217905092915050565b617dde82615541565b67ffffffffffffffff811115617df757617df6615680565b5b617e01825461678b565b617e0c828285617d48565b600060209050601f831160018114617e3f5760008415617e2d578287015190505b617e378582617db9565b865550617e9f565b601f198416617e4d86617c33565b60005b82811015617e7557848901518255600182019150602085019450602081019050617e50565b86831015617e925784890151617e8e601f891682617d9b565b8355505b6001600288020188555050505b505050505050565b6000617eb2826152ad565b915060008203617ec557617ec46167eb565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000617f0660208361554c565b9150617f1182617ed0565b602082019050919050565b60006020820190508181036000830152617f3581617ef9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000617f76826152ad565b9150617f81836152ad565b925082617f9157617f90617f3c565b5b828206905092915050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000617ff860288361554c565b915061800382617f9c565b604082019050919050565b6000602082019050818103600083015261802781617feb565b9050919050565b61803781615a90565b82525050565b6000604082019050618052600083018561802e565b61805f602083018461802e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204ea3a71f2e7477e31ea37cfdc28b047c661f6a7c494e90c6e39ba0520fe1e5b964736f6c63430008110033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
