{
    "_format": "hh-sol-artifact-1",
    "contractName": "Market",
    "sourceName": "contracts/Market.sol",
    "abi": [
        {
            "inputs": [],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "CertificateNotYetMinted",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "ERC20TransferFailed",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "InsufficientSupply",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "InvalidCertificateAmount",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "InvalidNoriFeePercentage",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "decimals",
                    "type": "uint256"
                }
            ],
            "name": "InvalidPurchasingTokenDecimals",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "LowSupplyAllowlistRequired",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "NoriFeeWalletZeroAddress",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "removalId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "year",
                    "type": "uint256"
                }
            ],
            "name": "RemovalNotFoundInYear",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "ReplacementAmountExceedsNrtDeficit",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "ReplacementAmountMismatch",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "SenderNotRemovalContract",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "UnauthorizedWithdrawal",
            "type": "error"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "supplierAddress",
                    "type": "address"
                }
            ],
            "name": "AddRemoval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "added",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "next",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previous",
                    "type": "address"
                }
            ],
            "name": "AddSupplier",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Paused",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "contract Removal",
                    "name": "removal",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "contract Certificate",
                    "name": "certificate",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20WithPermit",
                    "name": "purchasingToken",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "contract RestrictedNORI",
                    "name": "restrictedNORI",
                    "type": "address"
                }
            ],
            "name": "RegisterContractAddresses",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "removed",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "next",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previous",
                    "type": "address"
                }
            ],
            "name": "RemoveSupplier",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "removalId",
                    "type": "uint256"
                }
            ],
            "name": "RestrictedNORIMintFailure",
            "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": "priceMultiple",
                    "type": "uint256"
                }
            ],
            "name": "SetPriceMultiple",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "threshold",
                    "type": "uint256"
                }
            ],
            "name": "SetPriorityRestrictedThreshold",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "contract IERC20WithPermit",
                    "name": "purchasingToken",
                    "type": "address"
                }
            ],
            "name": "SetPurchasingToken",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "removalId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "currentHoldbackPercentage",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "rNoriUnderlyingToken",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "purchasingTokenAddress",
                    "type": "address"
                }
            ],
            "name": "SkipRestrictedNORIERC20Transfer",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Unpaused",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "certificateId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256[]",
                    "name": "removalIds",
                    "type": "uint256[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint256[]",
                    "name": "amounts",
                    "type": "uint256[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint256[]",
                    "name": "removalIdsBeingReplaced",
                    "type": "uint256[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint256[]",
                    "name": "amountsBeingReplaced",
                    "type": "uint256[]"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "purchasingTokenAddress",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "priceMultiple",
                    "type": "uint256"
                }
            ],
            "name": "UpdateCertificate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "updatedFeePercentage",
                    "type": "uint256"
                }
            ],
            "name": "UpdateNoriFeePercentage",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "updatedWalletAddress",
                    "type": "address"
                }
            ],
            "name": "UpdateNoriFeeWalletAddress",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "ALLOWLIST_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": "MARKET_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": [
                {
                    "internalType": "uint256",
                    "name": "purchaseTotal",
                    "type": "uint256"
                }
            ],
            "name": "calculateCertificateAmountFromPurchaseTotal",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "purchaseTotal",
                    "type": "uint256"
                }
            ],
            "name": "calculateCertificateAmountFromPurchaseTotalWithoutFee",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "calculateCheckoutTotal",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "calculateCheckoutTotalWithoutFee",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "calculateNoriFee",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "purchasingTokenAmount",
                    "type": "uint256"
                }
            ],
            "name": "convertPurchasingTokenDecimalsToRemovalDecimals",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "removalAmount",
                    "type": "uint256"
                }
            ],
            "name": "convertRemovalDecimalsToPurchasingTokenDecimals",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getActiveSuppliers",
            "outputs": [
                {
                    "internalType": "address[]",
                    "name": "suppliers",
                    "type": "address[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getCertificateAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getNoriFeePercentage",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getNoriFeeWallet",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getPriceMultiple",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getPriorityRestrictedThreshold",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getPurchasingTokenAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getRemovalAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "supplier",
                    "type": "address"
                }
            ],
            "name": "getRemovalIdsForSupplier",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "removalIds",
                    "type": "uint256[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getRestrictedNoriAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "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": "contract Removal",
                    "name": "removal",
                    "type": "address"
                },
                {
                    "internalType": "contract IERC20WithPermit",
                    "name": "purchasingToken",
                    "type": "address"
                },
                {
                    "internalType": "contract Certificate",
                    "name": "certificate",
                    "type": "address"
                },
                {
                    "internalType": "contract RestrictedNORI",
                    "name": "restrictedNori",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "noriFeeWalletAddress",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "noriFeePercentage_",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "priceMultiple_",
                    "type": "uint256"
                }
            ],
            "name": "initialize",
            "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": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "uint256[]",
                    "name": "ids",
                    "type": "uint256[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "",
                    "type": "uint256[]"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "name": "onERC1155BatchReceived",
            "outputs": [
                {
                    "internalType": "bytes4",
                    "name": "",
                    "type": "bytes4"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "name": "onERC1155Received",
            "outputs": [
                {
                    "internalType": "bytes4",
                    "name": "",
                    "type": "bytes4"
                }
            ],
            "stateMutability": "nonpayable",
            "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 Removal",
                    "name": "removal",
                    "type": "address"
                },
                {
                    "internalType": "contract Certificate",
                    "name": "certificate",
                    "type": "address"
                },
                {
                    "internalType": "contract IERC20WithPermit",
                    "name": "purchasingToken",
                    "type": "address"
                },
                {
                    "internalType": "contract RestrictedNORI",
                    "name": "restrictedNORI",
                    "type": "address"
                }
            ],
            "name": "registerContractAddresses",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "removalId",
                    "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": "address",
                    "name": "treasury",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "certificateId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "totalAmountToReplace",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256[]",
                    "name": "removalIdsBeingReplaced",
                    "type": "uint256[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "amountsBeingReplaced",
                    "type": "uint256[]"
                }
            ],
            "name": "replace",
            "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": "uint256",
                    "name": "noriFeePercentage_",
                    "type": "uint256"
                }
            ],
            "name": "setNoriFeePercentage",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "noriFeeWalletAddress",
                    "type": "address"
                }
            ],
            "name": "setNoriFeeWallet",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "threshold",
                    "type": "uint256"
                }
            ],
            "name": "setPriorityRestrictedThreshold",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IERC20WithPermit",
                    "name": "purchasingToken",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "priceMultiple",
                    "type": "uint256"
                }
            ],
            "name": "setPurchasingTokenAndPriceMultiple",
            "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": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "permitOwner",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "deadline",
                    "type": "uint256"
                },
                {
                    "internalType": "uint8",
                    "name": "v",
                    "type": "uint8"
                },
                {
                    "internalType": "bytes32",
                    "name": "r",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes32",
                    "name": "s",
                    "type": "bytes32"
                }
            ],
            "name": "swap",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "swap",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "supplier",
                    "type": "address"
                }
            ],
            "name": "swapFromSupplier",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "permitOwner",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "supplier",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "deadline",
                    "type": "uint256"
                },
                {
                    "internalType": "uint8",
                    "name": "v",
                    "type": "uint8"
                },
                {
                    "internalType": "bytes32",
                    "name": "r",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes32",
                    "name": "s",
                    "type": "bytes32"
                }
            ],
            "name": "swapFromSupplier",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "purchaser",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "supplier",
                    "type": "address"
                }
            ],
            "name": "swapFromSupplierWithoutFee",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "purchaser",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "supplier",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "customFee",
                    "type": "uint256"
                }
            ],
            "name": "swapFromSupplierWithoutFeeSpecialOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "purchaser",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "swapWithoutFee",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "purchaser",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "customFee",
                    "type": "uint256"
                }
            ],
            "name": "swapWithoutFeeSpecialOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "unpause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "removalId",
                    "type": "uint256"
                }
            ],
            "name": "withdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x60806040523480156200001157600080fd5b50620000226200002860201b60201c565b620001d3565b600060019054906101000a900460ff16156200007b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000729062000176565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620000ed5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620000e49190620001b6565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200015e602783620000ef565b91506200016b8262000100565b604082019050919050565b6000602082019050818103600083015262000191816200014f565b9050919050565b600060ff82169050919050565b620001b08162000198565b82525050565b6000602082019050620001cd6000830184620001a5565b92915050565b6191e780620001e36000396000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c806301ffc9a71461026157806302e0affa14610291578063069a9e4f146102c15780630ed1f1eb146102dd5780631ce08c0b146102f9578063248a9ca31461032957806325fbff7a146103595780632c9fcbd7146103895780632e1a7d4d146103a75780632f2ff15d146103c35780633030b532146103df57806332786049146103fd57806336568abe1461041957806337bdc99b146104355780633f4ba83a14610451578063453aabc31461045b57806346e738f31461047757806347883bce146104a75780634b66f665146104c3578063596abe94146104e15780635c975abb146104ff5780636cf250e21461051d57806374d3627b1461053b5780637f49f738146105575780638456cb591461057557806384e043221461057f578063856e115a1461059b57806385d3d64b146105b75780638c6b8d98146105d55780639010d07c146105f157806391d14854146106215780639d1fbcf514610651578063a12d687414610681578063a217fddf1461069d578063a5758566146106bb578063a8f881c0146106eb578063ac9650d814610709578063b33f952714610739578063b905425714610755578063bc197c8114610773578063c0c7028c146107a3578063ca15c873146107d3578063d004f0f714610803578063d41436ce1461081f578063d547741f1461083b578063d6f0d39f14610857578063d797462f14610875578063dfa4bb0f14610891578063e63ab1e9146108c1578063e7f78c72146108df578063f23a6e61146108fd578063f9c285281461092d575b600080fd5b61027b6004803603810190610276919061700d565b610949565b6040516102889190617055565b60405180910390f35b6102ab60048036038101906102a691906170a6565b61095b565b6040516102b891906170e2565b60405180910390f35b6102db60048036038101906102d6919061715b565b610a03565b005b6102f760048036038101906102f291906171d6565b610ada565b005b610313600480360381019061030e91906170a6565b610baf565b60405161032091906170e2565b60405180910390f35b610343600480360381019061033e9190617273565b610c8d565b60405161035091906172af565b60405180910390f35b610373600480360381019061036e91906172ca565b610cad565b60405161038091906173b5565b60405180910390f35b610391610d04565b60405161039e91906173e6565b60405180910390f35b6103c160048036038101906103bc91906170a6565b610d2f565b005b6103dd60048036038101906103d89190617401565b610ec8565b005b6103e7610ee9565b6040516103f491906172af565b60405180910390f35b610417600480360381019061041291906170a6565b610f0d565b005b610433600480360381019061042e9190617401565b610fbd565b005b61044f600480360381019061044a91906170a6565b611040565b005b61045961119e565b005b6104756004803603810190610470919061747a565b6111d3565b005b610491600480360381019061048c91906170a6565b611311565b60405161049e91906170e2565b60405180910390f35b6104c160048036038101906104bc919061751c565b6113b5565b005b6104cb611470565b6040516104d891906173e6565b60405180910390f35b6104e961149b565b6040516104f6919061762d565b60405180910390f35b61050761199c565b6040516105149190617055565b60405180910390f35b6105256119b3565b60405161053291906170e2565b60405180910390f35b6105556004803603810190610550919061764f565b6119be565b005b61055f611a97565b60405161056c91906173e6565b60405180910390f35b61057d611ac2565b005b610599600480360381019061059491906176f4565b611af7565b005b6105b560048036038101906105b09190617734565b611b40565b005b6105bf611c79565b6040516105cc91906173e6565b60405180910390f35b6105ef60048036038101906105ea9190617943565b611ca4565b005b61060b600480360381019061060691906179f6565b6120f2565b60405161061891906173e6565b60405180910390f35b61063b60048036038101906106369190617401565b612121565b6040516106489190617055565b60405180910390f35b61066b600480360381019061066691906170a6565b61218c565b60405161067891906170e2565b60405180910390f35b61069b60048036038101906106969190617af0565b61226a565b005b6106a5612457565b6040516106b291906172af565b60405180910390f35b6106d560048036038101906106d091906170a6565b61245e565b6040516106e291906170e2565b60405180910390f35b6106f3612586565b60405161070091906170e2565b60405180910390f35b610723600480360381019061071e9190617bb2565b612591565b6040516107309190617d40565b60405180910390f35b610753600480360381019061074e9190617d62565b61269d565b005b61075d612a54565b60405161076a91906170e2565b60405180910390f35b61078d60048036038101906107889190617eb0565b612a5f565b60405161079a9190617f9b565b60405180910390f35b6107bd60048036038101906107b891906170a6565b612b59565b6040516107ca91906170e2565b60405180910390f35b6107ed60048036038101906107e89190617273565b612c0f565b6040516107fa91906170e2565b60405180910390f35b61081d60048036038101906108189190617fb6565b612c33565b005b61083960048036038101906108349190617ff6565b612cec565b005b61085560048036038101906108509190617401565b612dc3565b005b61085f612de4565b60405161086c91906172af565b60405180910390f35b61088f600480360381019061088a91906170a6565b612e08565b005b6108ab60048036038101906108a691906170a6565b612e7d565b6040516108b891906170e2565b60405180910390f35b6108c9612f27565b6040516108d691906172af565b60405180910390f35b6108e7612f4b565b6040516108f491906173e6565b60405180910390f35b61091760048036038101906109129190618049565b612f76565b6040516109249190617f9b565b60405180910390f35b610947600480360381019061094291906172ca565b613035565b005b60006109548261314a565b9050919050565b60006109fc6127106101315460646109739190618112565b3073ffffffffffffffffffffffffffffffffffffffff16639d1fbcf5866040518263ffffffff1660e01b81526004016109ac91906170e2565b602060405180830381865afa1580156109c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ed9190618169565b6131c49092919063ffffffff16565b9050919050565b610a0b61329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1610a35816132e9565b610a3e846132fd565b600080600080610a4f898989613421565b9350935093509350610ace6040518061012001604052806000151581526020018881526020018a81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b50505050505050505050565b610ae261329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1610b0c816132e9565b610b15836132fd565b600080600080610b2588886136c2565b9350935093509350610ba46040518061012001604052806000151581526020018881526020018981526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b505050505050505050565b60008061012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4491906181ab565b60ff16905060128103610c5a5782915050610c88565b6000816012610c6991906181d8565b905080600a610c78919061833f565b84610c8391906183b9565b925050505b919050565b600060976000838152602001908152602001600020600101549050919050565b6060600061013760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610cfc81613797565b915050919050565b600061012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d3761329f565b6000610d42826138e5565b9050610d4d816138fb565b15610e9257610d5c8282613a1f565b61012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30838561012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e30896040518363ffffffff1660e01b8152600401610dfb9291906183ea565b602060405180830381865afa158015610e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3c9190618169565b6040518563ffffffff1660e01b8152600401610e5b949392919061844a565b600060405180830381600087803b158015610e7557600080fd5b505af1158015610e89573d6000803e3d6000fd5b50505050610ec4565b6040517f60b39bc500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b610ed182610c8d565b610eda816132e9565b610ee48383613acc565b505050565b7f26a560d834a19637eccba4611bbc09fb32970bb627da0a70f14f83fdc9822cbc81565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1610f37816132e9565b610f3f61329f565b6064821115610f7a576040517fedb7340700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81610133819055507fb9768ed0b3c8d7421842f14094358b08617bad6081b469cd89de35a8d466785882604051610fb191906170e2565b60405180910390a15050565b610fc5613ae2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102990618525565b60405180910390fd5b61103c8282613aea565b5050565b61104861329f565b61012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661108a613ae2565b73ffffffffffffffffffffffffffffffffffffffff16146110d7576040517f9a5ed74b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110e2826138e5565b9050600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e30856040518363ffffffff1660e01b81526004016111439291906183ea565b602060405180830381865afa158015611160573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111849190618169565b905060008103611199576111988383613a1f565b5b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111c8816132e9565b6111d0613b00565b50565b6111db61329f565b6111e4856132fd565b6000806000806111fb6111f5613ae2565b8a6136c2565b935093509350935061128a8a3073ffffffffffffffffffffffffffffffffffffffff1663a57585668c6040518263ffffffff1660e01b815260040161124091906170e2565b602060405180830381865afa15801561125d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112819190618169565b8a8a8a8a613b63565b6113046040518061012001604052806001151581526020016101335481526020018b81526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b5050505050505050505050565b600061131c826132fd565b3073ffffffffffffffffffffffffffffffffffffffff16631ce08c0b611351610131546064866131c49092919063ffffffff16565b6040518263ffffffff1660e01b815260040161136d91906170e2565b602060405180830381865afa15801561138a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ae9190618169565b9050919050565b6113bd61329f565b6113c6826132fd565b6000806000806113de6113d7613ae2565b8787613421565b9350935093509350611467604051806101200160405280600115158152602001610133548152602001888152602001611415613ae2565b73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b50505050505050565b600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060008073ffffffffffffffffffffffffffffffffffffffff16610136600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b757600190506000610136600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b61013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116b55761013660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816116ae90618545565b91506115e8565b505b60008167ffffffffffffffff8111156116d3576116d2617800565b5b6040519080825280602002602001820160405280156117015781602001602082028036833780820191505090505b509050600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061013660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050905060005b8481101561199157828482815181106118465761184561858d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508160200151925061013660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505091508061198a90618545565b905061182a565b508294505050505090565b6000603360009054906101000a900460ff16905090565b600061013354905090565b6119c661329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e16119f0816132e9565b6119f9836132fd565b600080600080611a0a888888613421565b9350935093509350611a8c6040518061012001604052806000151581526020016101335481526020018981526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b505050505050505050565b600061013260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611aec816132e9565b611af4613c05565b50565b611aff61329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1611b29816132e9565b611b3283613c68565b611b3b82613daf565b505050565b611b4861329f565b611b51866132fd565b600080600080611b628b8b8b613421565b9350935093509350611bf18b3073ffffffffffffffffffffffffffffffffffffffff1663a57585668d6040518263ffffffff1660e01b8152600401611ba791906170e2565b602060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190618169565b8a8a8a8a613b63565b611c6b6040518061012001604052806001151581526020016101335481526020018c81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b505050505050505050505050565b600061013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611cac61329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1611cd6816132e9565b600061012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2f3ea43876040518263ffffffff1660e01b8152600401611d3491906170e2565b602060405180830381865afa158015611d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d759190618169565b03611db757846040517fb281ad80000000000000000000000000000000000000000000000000000000008152600401611dae91906170e2565b60405180910390fd5b600061012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd39c7506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b9190618169565b905080851115611e87576040517fb106efdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663964eec706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1b9190618169565b9050611f278682613df1565b600080600080611f368a613e2f565b93509350935093506000611f566000868661442e9092919063ffffffff16565b90506000611f706000878661442e9092919063ffffffff16565b9050611f7d8c828c6144d7565b611f8c60008f8885858861453e565b61012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632eb2c2d63061012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858560016040516020016120049190617055565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016120339594939291906185f5565b600060405180830381600087803b15801561204d57600080fd5b505af1158015612061573d6000803e3d6000fd5b5050505061012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168d7f40a27cbb002b48214250b00c6c1b15ff8276b363217ca42c7b1720bcf269a76c84848f8f610131546040516120da95949392919061865d565b60405180910390a35050505050505050505050505050565b60006121198260c96000868152602001908152602001600020614edf90919063ffffffff16565b905092915050565b60006097600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008061012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222191906181ab565b60ff169050601281036122375782915050612265565b600081601261224691906181d8565b905080600a612255919061833f565b846122609190618112565b925050505b919050565b6000801b612277816132e9565b61227f61329f565b8461012d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508361012e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508261012f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508161013060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99ad00cf49121d7da2a94fdef5f9ef6c736c933295dcb1cfdfc509905fd89f3161012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051612448949392919061878e565b60405180910390a15050505050565b6000801b81565b6000612469826132fd565b3073ffffffffffffffffffffffffffffffffffffffff1663dfa4bb0f836040518263ffffffff1660e01b81526004016124a291906170e2565b602060405180830381865afa1580156124bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e39190618169565b3073ffffffffffffffffffffffffffffffffffffffff16631ce08c0b612518610131546064876131c49092919063ffffffff16565b6040518263ffffffff1660e01b815260040161253491906170e2565b602060405180830381865afa158015612551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125759190618169565b61257f91906187d3565b9050919050565b600061013154905090565b60608282905067ffffffffffffffff8111156125b0576125af617800565b5b6040519080825280602002602001820160405280156125e357816020015b60608152602001906001900390816125ce5790505b50905060005b83839050811015612696576126653085858481811061260b5761260a61858d565b5b905060200281019061261d9190618816565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050614ef9565b8282815181106126785761267761858d565b5b6020026020010181905250808061268e90618545565b9150506125e9565b5092915050565b60008060019054906101000a900460ff161590508080156126ce5750600160008054906101000a900460ff1660ff16105b806126fb57506126dd30614fdd565b1580156126fa5750600160008054906101000a900460ff1660ff16145b5b61273a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612731906188eb565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015612777576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127dd576040517fb79b591400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127e5615000565b6127ed615051565b6127f56150a2565b6127fd61510e565b61280561515f565b61280d6151b0565b8761012d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508561012e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508461013060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082610133819055508361013260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600061013481905550600061013560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061297287613c68565b61297b82613daf565b61298f6000801b61298a613ae2565b613acc565b6129c07f26a560d834a19637eccba4611bbc09fb32970bb627da0a70f14f83fdc9822cbc6129bb613ae2565b613acc565b6129f17f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e16129ec613ae2565b613acc565b8015612a4a5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051612a419190618946565b60405180910390a15b5050505050505050565b600061013454905090565b6000612a6961329f565b61012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612aab613ae2565b73ffffffffffffffffffffffffffffffffffffffff1614612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af8906189ad565b60405180910390fd5b60005b87879050811015612b4257612b31888883818110612b2557612b2461858d565b5b90506020020135615201565b80612b3b90618545565b9050612b04565b5063bc197c8160e01b905098975050505050505050565b6000612c0861271061013154610133546064612b7591906187d3565b612b7f9190618112565b3073ffffffffffffffffffffffffffffffffffffffff16639d1fbcf5866040518263ffffffff1660e01b8152600401612bb891906170e2565b602060405180830381865afa158015612bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf99190618169565b6131c49092919063ffffffff16565b9050919050565b6000612c2c60c96000848152602001908152602001600020615349565b9050919050565b612c3b61329f565b612c44816132fd565b600080600080612c5b612c55613ae2565b866136c2565b9350935093509350612ce4604051806101200160405280600115158152602001610133548152602001878152602001612c92613ae2565b73ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b505050505050565b612cf461329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1612d1e816132e9565b612d27826132fd565b600080600080612d3787876136c2565b9350935093509350612db96040518061012001604052806000151581526020016101335481526020018881526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b5050505050505050565b612dcc82610c8d565b612dd5816132e9565b612ddf8383613aea565b505050565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e181565b612e1061329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1612e3a816132e9565b81610134819055507fa01a3b548ccd65893a6acee4ea0da2602fbd2aef7e3040483b026d9544d8074c82604051612e7191906170e2565b60405180910390a15050565b60003073ffffffffffffffffffffffffffffffffffffffff16631ce08c0b612ec36101335461013154612eb09190618112565b612710866131c49092919063ffffffff16565b6040518263ffffffff1660e01b8152600401612edf91906170e2565b602060405180830381865afa158015612efc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f209190618169565b9050919050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b600061012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612f8061329f565b61012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fc2613ae2565b73ffffffffffffffffffffffffffffffffffffffff1614613018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300f906189ad565b60405180910390fd5b61302185615201565b63f23a6e6160e01b90509695505050505050565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e161305f816132e9565b61306761329f565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130cd576040517fb79b591400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8161013260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe846164b6756d387276a93f2200cfd28f5792fffe3530e65d95d7535cd43dab48260405161313e91906173e6565b60405180910390a15050565b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806131bd57506131bc8261535e565b5b9050919050565b60008060008019858709858702925082811083820303915050600081036131ff578382816131f5576131f461838a565b5b0492505050613298565b80841161320b57600080fd5b60008486880990508281118203915080830392506000600186190186169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b6132a761199c565b156132e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132de90618a19565b60405180910390fd5b565b6132fa816132f5613ae2565b6153d8565b50565b60006002905060008161012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613374573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339891906181ab565b60126133a49190618a39565b60ff166133b191906187d3565b905060008314806133da5750600081600a6133cc919061833f565b846133d79190618a6e565b14155b1561341c57826040517f277f4c2700000000000000000000000000000000000000000000000000000000815260040161341391906170e2565b60405180910390fd5b505050565b600060608060606134c4878761012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663964eec706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561349b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bf9190618169565b61545d565b6134ce86866154de565b809450819550829650505050613535858567ffffffffffffffff8111156134f8576134f7617800565b5b6040519080825280602002602001820160405280156135265781602001602082028036833780820191505090505b5061586790919063ffffffff16565b905093509350935093565b600061356060008360a001518460c0015161442e9092919063ffffffff16565b9050600061358260008460a001518560e0015161442e9092919063ffffffff16565b90506135a3836000015184606001518560a00151858588610100015161453e565b6000808460800151856040015161012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101315488602001516040516020016135f296959493929190618a9f565b604051602081830303815290604052905061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632eb2c2d63061012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168686866040518663ffffffff1660e01b815260040161368a9594939291906185f5565b600060405180830381600087803b1580156136a457600080fd5b505af11580156136b8573d6000803e3d6000fd5b5050505050505050565b60006060806060600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663964eec706040518163ffffffff1660e01b8152600401602060405180830381865afa158015613739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375d9190618169565b90506137698682613df1565b61377487878361545d565b61377d86613e2f565b809550819650829750839850505050505092959194509250565b606060008260020154905060008060009050600080866001015490505b8481116137f95786600001600082815260200190815260200160002093506137db846158e3565b836137e691906187d3565b9250806137f290618545565b90506137b4565b5060008267ffffffffffffffff81111561381657613815617800565b5b6040519080825280602002602001820160405280156138445781602001602082028036833780820191505090505b5090506000876001015490505b8581116138d757876000016000828152602001908152602001600020945060005b61387b866158e3565b8110156138c55761389581876158f890919063ffffffff16565b8385806001019650815181106138ae576138ad61858d565b5b602002602001018181525050806001019050613872565b50806138d090618545565b9050613851565b508095505050505050919050565b60006138f48260146004615912565b9050919050565b60008173ffffffffffffffffffffffffffffffffffffffff1661391c613ae2565b73ffffffffffffffffffffffffffffffffffffffff16148061396b575061396a7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1613965613ae2565b612121565b5b80613a18575061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c5836139b9613ae2565b6040518363ffffffff1660e01b81526004016139d6929190618b00565b602060405180830381865afa1580156139f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a179190618b55565b5b9050919050565b613a718261013760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061597690919063ffffffff16565b613ab961013760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020615b39565b15613ac857613ac781615b49565b5b5050565b613ad461329f565b613ade8282615f82565b5050565b600033905090565b613af261329f565b613afc8282615fb6565b5050565b613b08615fea565b6000603360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613b4c613ae2565b604051613b5991906173e6565b60405180910390a1565b61012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d505accf873088888888886040518863ffffffff1660e01b8152600401613bcb9796959493929190618b91565b600060405180830381600087803b158015613be557600080fd5b505af1158015613bf9573d6000803e3d6000fd5b50505050505050505050565b613c0d61329f565b6001603360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613c51613ae2565b604051613c5e91906173e6565b60405180910390a1565b60008173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cd991906181ab565b905060128160ff161180613cf0575060068160ff16105b15613d3257806040517f094d18ae000000000000000000000000000000000000000000000000000000008152600401613d299190618c31565b60405180910390fd5b8161012f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f94e2ca3c006ff5152db658db7f198e3606e0c8584958dbb13538cdd9b30ccb7282604051613da39190618c4c565b60405180910390a15050565b80610131819055507f36a09eaea278b547d70faf65508009f5a7d32dfd33d27131e792f7e78bb4215881604051613de691906170e2565b60405180910390a150565b80821115613e2b576040517f33aa101c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b600060608060606000859050600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663789e8cdf306040518263ffffffff1660e01b8152600401613e9991906173e6565b602060405180830381865afa158015613eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eda9190618169565b90508067ffffffffffffffff811115613ef657613ef5617800565b5b604051908082528060200260200182016040528015613f245781602001602082028036833780820191505090505b5094508067ffffffffffffffff811115613f4157613f40617800565b5b604051908082528060200260200182016040528015613f6f5781602001602082028036833780820191505090505b5093508067ffffffffffffffff811115613f8c57613f8b617800565b5b604051908082528060200260200182016040528015613fba5781602001602082028036833780820191505090505b5092506000955060005b81811015614424576000614039610137600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020616033565b9050600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e30846040518363ffffffff1660e01b815260040161409a9291906183ea565b602060405180830381865afa1580156140b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140db9190618169565b90508085101561419f5781888a815181106140f9576140f861858d565b5b60200260200101818152505084878a815181106141195761411861858d565b5b60200260200101818152505061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868a8151811061415c5761415b61858d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600094506143f6565b81888a815181106141b3576141b261858d565b5b60200260200101818152505080878a815181106141d3576141d261858d565b5b60200260200101818152505061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868a815181106142165761421561858d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808561425c91906181d8565b9450600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506142b38361013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613a1f565b61013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156143e6575061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610136600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156143f4576143f3616068565b5b505b8861440090618545565b985060008503614411575050614424565b50508061441d90618545565b9050613fc4565b5050509193509193565b60608183111561444157614440618c67565b5b835182111561445357614452618c67565b5b600083830390508067ffffffffffffffff81111561447457614473617800565b5b6040519080825280602002602001820160405280156144a25781602001602082028036833780820191505090505b50915060015b600182018110156144ce57808501602002860151816020028401526001810190506144a8565b50509392505050565b60006144e283616132565b905060006144ef83616132565b905080821415806145005750848214155b15614537576040517f49f82da600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60008060008060005b88811015614ed25761012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b776d3338983815181106145a1576145a061858d565b5b60200260200101516040518263ffffffff1660e01b81526004016145c591906170e2565b602060405180830381865afa1580156145e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061460691906181ab565b93503073ffffffffffffffffffffffffffffffffffffffff16631ce08c0b6146576101315460648b86815181106146405761463f61858d565b5b60200260200101516131c49092919063ffffffff16565b6040518263ffffffff1660e01b815260040161467391906170e2565b602060405180830381865afa158015614690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b49190618169565b915060008460ff161115614c32573073ffffffffffffffffffffffffffffffffffffffff16631ce08c0b6147208660ff16610131546146f39190618112565b6127108b86815181106147095761470861858d565b5b60200260200101516131c49092919063ffffffff16565b6040518263ffffffff1660e01b815260040161473c91906170e2565b602060405180830381865afa158015614759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477d9190618169565b9250828261478b91906181d8565b915061012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663440f5fd26040518163ffffffff1660e01b8152600401602060405180830381865afa158015614835573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148599190618cab565b73ffffffffffffffffffffffffffffffffffffffff1614614992578781815181106148875761488661858d565b5b6020026020010151837ff13b9ad9c5cff251c7890be98dd7159a5dde3f28cba336aeaaf551d9da06e7e08661013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663440f5fd26040518163ffffffff1660e01b8152600401602060405180830381865afa158015614920573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149449190618cab565b61012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161497793929190618cd8565b60405180910390a3828261498b91906187d3565b9150614c31565b61013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631b2ef1ca848a84815181106149e5576149e461858d565b5b60200260200101516040518363ffffffff1660e01b8152600401614a0a929190618d0f565b600060405180830381600087803b158015614a2457600080fd5b505af1925050508015614a35575060015b614b3057878181518110614a4c57614a4b61858d565b5b6020026020010151837fc63600d29a0ef31fe04e22e26a10c75787f6f15d8a95f6b340b232481bf6d69660405160405180910390a361013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c309f8e1878381518110614ad357614ad261858d565b5b6020026020010151856040518363ffffffff1660e01b8152600401614af99291906183ea565b600060405180830381600087803b158015614b1357600080fd5b505af1158015614b27573d6000803e3d6000fd5b50505050614b31565b5b61012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8b61013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b8152600401614bb493929190618d38565b6020604051808303816000875af1158015614bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bf79190618b55565b945084614c30576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b8a15614dcb5761012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8b61013260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1663dfa4bb0f8c8781518110614ccb57614cca61858d565b5b60200260200101516040518263ffffffff1660e01b8152600401614cef91906170e2565b602060405180830381865afa158015614d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d309190618169565b6040518463ffffffff1660e01b8152600401614d4e93929190618d38565b6020604051808303816000875af1158015614d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d919190618b55565b945084614dca576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b61012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8b888481518110614e1e57614e1d61858d565b5b6020026020010151856040518463ffffffff1660e01b8152600401614e4593929190618d38565b6020604051808303816000875af1158015614e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e889190618b55565b945084614ec1576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80614ecb90618545565b9050614547565b5050505050505050505050565b6000614eee8360000183616171565b60001c905092915050565b6060614f0483614fdd565b614f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614f3a90618de1565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1684604051614f6b9190618e3d565b600060405180830381855af49150503d8060008114614fa6576040519150601f19603f3d011682016040523d82523d6000602084013e614fab565b606091505b5091509150614fd3828260405180606001604052806027815260200161918b6027913961619c565b9250505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff1661504f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161504690618ec6565b60405180910390fd5b565b600060019054906101000a900460ff166150a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161509790618ec6565b60405180910390fd5b565b600060019054906101000a900460ff166150f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150e890618ec6565b60405180910390fd5b6000603360006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff1661515d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161515490618ec6565b60405180910390fd5b565b600060019054906101000a900460ff166151ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016151a590618ec6565b60405180910390fd5b565b600060019054906101000a900460ff166151ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016151f690618ec6565b60405180910390fd5b565b600061520c826138e5565b90506152608261013760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206161be90919063ffffffff16565b600073ffffffffffffffffffffffffffffffffffffffff1661013660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036153015761530081616253565b5b8073ffffffffffffffffffffffffffffffffffffffff16827f3f2e35daa045b6aa1cc1d76e5337f2bce6985b354b49e998d4ce29d683190d1560405160405180910390a35050565b6000615357826000016167f4565b9050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806153d157506153d082616805565b5b9050919050565b6153e28282612121565b615459576153ef8161686f565b6153fd8360001c602061689c565b60405160200161540e929190618fc5565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154509190619038565b60405180910390fd5b5050565b60006154698284616ad8565b915050610134548110156154d8576154a17f26a560d834a19637eccba4611bbc09fb32970bb627da0a70f14f83fdc9822cbc85612121565b6154d7576040517f9ece8f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6000606080600061013760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080826002015490506000836001015490505b81811161557d5761555f8460000160008381526020019081526020016000206158e3565b8361556a91906187d3565b92508061557690618545565b905061553b565b50600082036155b8576040517f33aa101c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008890508267ffffffffffffffff8111156155d7576155d6617800565b5b6040519080825280602002602001820160405280156156055781602001602082028036833780820191505090505b5095508267ffffffffffffffff81111561562257615621617800565b5b6040519080825280602002602001820160405280156156505781602001602082028036833780820191505090505b5094506000965060005b8381101561585b57600061566d86616033565b9050600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e30846040518363ffffffff1660e01b81526004016156ce9291906183ea565b602060405180830381865afa1580156156eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061570f9190618169565b9050808410156157625781898b8151811061572d5761572c61858d565b5b60200260200101818152505083888b8151811061574d5761574c61858d565b5b6020026020010181815250506000935061582d565b60018661576f91906181d8565b8a14801561577c57508084115b156157b3576040517f33aa101c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81898b815181106157c7576157c661858d565b5b60200260200101818152505080888b815181106157e7576157e661858d565b5b60200260200101818152505080846157ff91906181d8565b9350615814828861597690919063ffffffff16565b61581d87615b39565b1561582c5761582b8b615b49565b5b5b8961583790618545565b99506000840361584857505061585b565b50508061585490618545565b905061565a565b50505050509250925092565b60606000835190508067ffffffffffffffff81111561588957615888617800565b5b6040519080825280602002602001820160405280156158b75781602001602082028036833780820191505090505b50915060015b600182018110156158db5783816020028401526001810190506158bd565b505092915050565b60006158f1826000016167f4565b9050919050565b60006159078360000183616171565b60001c905092915050565b6000806008836159229190618112565b60016008866159319190618112565b600261593d919061833f565b61594791906181d8565b60001b901b90506000818660001b1690506008846159659190618112565b81901c60001c925050509392505050565b600061598182616b00565b61ffff1690506159ae82846000016000848152602001908152602001600020616b1690919063ffffffff16565b6159f15781816040517fb524f6fe0000000000000000000000000000000000000000000000000000000081526004016159e8929190618d0f565b60405180910390fd5b6159fb8382616b30565b15615b34578260020154836001015403615a47577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836001018190555060008360020181905550615b33565b82600101548103615abd57600060018460010154615a6591906187d3565b90505b83600201548111615ab7576000615a928560000160008481526020019081526020016000206158e3565b1115615aa657808460010181905550615ab7565b80615ab090618545565b9050615a68565b50615b32565b82600201548103615b3157600060018460020154615adb91906181d8565b90505b83600101548110615b2f576000615b088560000160008481526020019081526020016000206158e3565b1115615b1c57808460020181905550615b2f565b8080615b279061905a565b915050615ade565b505b5b5b5b505050565b6000808260020154149050919050565b600061013660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061013660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603615c9457600061013560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615df8565b8061013660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508161013660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603615df757615df6616068565b5b5b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525061013660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd853f0403f99e88d186f52744de8bd40a17410e4d2206e25ac3750410aa1973760405160405180910390a4505050565b615f8c8282616b46565b615fb18160c96000858152602001908152602001600020616c2790919063ffffffff16565b505050565b615fc08282616c57565b615fe58160c96000858152602001908152602001600020616d3990919063ffffffff16565b505050565b615ff261199c565b616031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401616028906190cf565b60405180910390fd5b565b60006160616000836000016000856001015481526020019081526020016000206158f890919063ffffffff16565b9050919050565b610136600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661013560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008151602083016020820281015b8082101561616957838251850194508085101561615d57600080fd5b50602082019150616141565b505050919050565b60008260000182815481106161895761618861858d565b5b9060005260206000200154905092915050565b606083156161ac578290506161b7565b6161b68383616d69565b5b9392505050565b60006161c982616b00565b61ffff1690506161d883615b39565b156161f457808360010181905550808360020181905550616226565b826001015481101561620e57808360010181905550616225565b8260020154811115616224578083600201819055505b5b5b61624d82846000016000848152602001908152602001600020616db990919063ffffffff16565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff1661013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603616474578061013560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808273ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681525061013660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f3a35d42f4bce14f93a24ab2ec3c4dc4cd013e5f16abcd79d5c93afa2cebc0c7260405160405180910390a46167f1565b6000610136600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060405180604001604052808273ffffffffffffffffffffffffffffffffffffffff16815260200161013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525061013660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508161013660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610136600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1661013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f3a35d42f4bce14f93a24ab2ec3c4dc4cd013e5f16abcd79d5c93afa2cebc0c7260405160405180910390a4505b50565b600081600001805490509050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606168958273ffffffffffffffffffffffffffffffffffffffff16601460ff1661689c565b9050919050565b6060600060028360026168af9190618112565b6168b991906187d3565b67ffffffffffffffff8111156168d2576168d1617800565b5b6040519080825280601f01601f1916602001820160405280156169045781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061693c5761693b61858d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106169a05761699f61858d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026169e09190618112565b6169ea91906187d3565b90505b6001811115616a8a577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110616a2c57616a2b61858d565b5b1a60f81b828281518110616a4357616a4261858d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080616a839061905a565b90506169ed565b5060008414616ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401616ac59061913b565b60405180910390fd5b8091505092915050565b60008083831115616aef5760008091509150616af9565b6001838503915091505b9250929050565b6000616b0f826002601c615912565b9050919050565b6000616b28836000018360001b616dd3565b905092915050565b600080616b3d8484616ee7565b14905092915050565b616b508282612121565b616c235760016097600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550616bc8613ae2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000616c4f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b616f0e565b905092915050565b616c618282612121565b15616d355760006097600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550616cda613ae2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000616d61836000018373ffffffffffffffffffffffffffffffffffffffff1660001b616dd3565b905092915050565b600082511115616d7c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401616db09190619038565b60405180910390fd5b6000616dcb836000018360001b616f0e565b905092915050565b60008083600101600084815260200190815260200160002054905060008114616edb576000600182616e0591906181d8565b9050600060018660000180549050616e1d91906181d8565b9050818114616e8c576000866000018281548110616e3e57616e3d61858d565b5b9060005260206000200154905080876000018481548110616e6257616e6161858d565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480616ea057616e9f61915b565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050616ee1565b60009150505b92915050565b6000616f068360000160008481526020019081526020016000206158e3565b905092915050565b6000616f1a8383616f7e565b616f73578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050616f78565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b616fea81616fb5565b8114616ff557600080fd5b50565b60008135905061700781616fe1565b92915050565b60006020828403121561702357617022616fab565b5b600061703184828501616ff8565b91505092915050565b60008115159050919050565b61704f8161703a565b82525050565b600060208201905061706a6000830184617046565b92915050565b6000819050919050565b61708381617070565b811461708e57600080fd5b50565b6000813590506170a08161707a565b92915050565b6000602082840312156170bc576170bb616fab565b5b60006170ca84828501617091565b91505092915050565b6170dc81617070565b82525050565b60006020820190506170f760008301846170d3565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000617128826170fd565b9050919050565b6171388161711d565b811461714357600080fd5b50565b6000813590506171558161712f565b92915050565b600080600080600060a0868803121561717757617176616fab565b5b600061718588828901617146565b955050602061719688828901617146565b94505060406171a788828901617091565b93505060606171b888828901617146565b92505060806171c988828901617091565b9150509295509295909350565b600080600080608085870312156171f0576171ef616fab565b5b60006171fe87828801617146565b945050602061720f87828801617146565b935050604061722087828801617091565b925050606061723187828801617091565b91505092959194509250565b6000819050919050565b6172508161723d565b811461725b57600080fd5b50565b60008135905061726d81617247565b92915050565b60006020828403121561728957617288616fab565b5b60006172978482850161725e565b91505092915050565b6172a98161723d565b82525050565b60006020820190506172c460008301846172a0565b92915050565b6000602082840312156172e0576172df616fab565b5b60006172ee84828501617146565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61732c81617070565b82525050565b600061733e8383617323565b60208301905092915050565b6000602082019050919050565b6000617362826172f7565b61736c8185617302565b935061737783617313565b8060005b838110156173a857815161738f8882617332565b975061739a8361734a565b92505060018101905061737b565b5085935050505092915050565b600060208201905081810360008301526173cf8184617357565b905092915050565b6173e08161711d565b82525050565b60006020820190506173fb60008301846173d7565b92915050565b6000806040838503121561741857617417616fab565b5b60006174268582860161725e565b925050602061743785828601617146565b9150509250929050565b600060ff82169050919050565b61745781617441565b811461746257600080fd5b50565b6000813590506174748161744e565b92915050565b600080600080600080600060e0888a03121561749957617498616fab565b5b60006174a78a828b01617146565b97505060206174b88a828b01617146565b96505060406174c98a828b01617091565b95505060606174da8a828b01617091565b94505060806174eb8a828b01617465565b93505060a06174fc8a828b0161725e565b92505060c061750d8a828b0161725e565b91505092959891949750929550565b60008060006060848603121561753557617534616fab565b5b600061754386828701617146565b935050602061755486828701617091565b925050604061756586828701617146565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6175a48161711d565b82525050565b60006175b6838361759b565b60208301905092915050565b6000602082019050919050565b60006175da8261756f565b6175e4818561757a565b93506175ef8361758b565b8060005b8381101561762057815161760788826175aa565b9750617612836175c2565b9250506001810190506175f3565b5085935050505092915050565b6000602082019050818103600083015261764781846175cf565b905092915050565b6000806000806080858703121561766957617668616fab565b5b600061767787828801617146565b945050602061768887828801617146565b935050604061769987828801617091565b92505060606176aa87828801617146565b91505092959194509250565b60006176c18261711d565b9050919050565b6176d1816176b6565b81146176dc57600080fd5b50565b6000813590506176ee816176c8565b92915050565b6000806040838503121561770b5761770a616fab565b5b6000617719858286016176df565b925050602061772a85828601617091565b9150509250929050565b600080600080600080600080610100898b03121561775557617754616fab565b5b60006177638b828c01617146565b98505060206177748b828c01617146565b97505060406177858b828c01617091565b96505060606177968b828c01617146565b95505060806177a78b828c01617091565b94505060a06177b88b828c01617465565b93505060c06177c98b828c0161725e565b92505060e06177da8b828c0161725e565b9150509295985092959890939650565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b617838826177ef565b810181811067ffffffffffffffff8211171561785757617856617800565b5b80604052505050565b600061786a616fa1565b9050617876828261782f565b919050565b600067ffffffffffffffff82111561789657617895617800565b5b602082029050602081019050919050565b600080fd5b60006178bf6178ba8461787b565b617860565b905080838252602082019050602084028301858111156178e2576178e16178a7565b5b835b8181101561790b57806178f78882617091565b8452602084019350506020810190506178e4565b5050509392505050565b600082601f83011261792a576179296177ea565b5b813561793a8482602086016178ac565b91505092915050565b600080600080600060a0868803121561795f5761795e616fab565b5b600061796d88828901617146565b955050602061797e88828901617091565b945050604061798f88828901617091565b935050606086013567ffffffffffffffff8111156179b0576179af616fb0565b5b6179bc88828901617915565b925050608086013567ffffffffffffffff8111156179dd576179dc616fb0565b5b6179e988828901617915565b9150509295509295909350565b60008060408385031215617a0d57617a0c616fab565b5b6000617a1b8582860161725e565b9250506020617a2c85828601617091565b9150509250929050565b6000617a418261711d565b9050919050565b617a5181617a36565b8114617a5c57600080fd5b50565b600081359050617a6e81617a48565b92915050565b6000617a7f8261711d565b9050919050565b617a8f81617a74565b8114617a9a57600080fd5b50565b600081359050617aac81617a86565b92915050565b6000617abd8261711d565b9050919050565b617acd81617ab2565b8114617ad857600080fd5b50565b600081359050617aea81617ac4565b92915050565b60008060008060808587031215617b0a57617b09616fab565b5b6000617b1887828801617a5f565b9450506020617b2987828801617a9d565b9350506040617b3a878288016176df565b9250506060617b4b87828801617adb565b91505092959194509250565b600080fd5b60008083601f840112617b7257617b716177ea565b5b8235905067ffffffffffffffff811115617b8f57617b8e617b57565b5b602083019150836020820283011115617bab57617baa6178a7565b5b9250929050565b60008060208385031215617bc957617bc8616fab565b5b600083013567ffffffffffffffff811115617be757617be6616fb0565b5b617bf385828601617b5c565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015617c65578082015181840152602081019050617c4a565b60008484015250505050565b6000617c7c82617c2b565b617c868185617c36565b9350617c96818560208601617c47565b617c9f816177ef565b840191505092915050565b6000617cb68383617c71565b905092915050565b6000602082019050919050565b6000617cd682617bff565b617ce08185617c0a565b935083602082028501617cf285617c1b565b8060005b85811015617d2e5784840389528151617d0f8582617caa565b9450617d1a83617cbe565b925060208a01995050600181019050617cf6565b50829750879550505050505092915050565b60006020820190508181036000830152617d5a8184617ccb565b905092915050565b600080600080600080600060e0888a031215617d8157617d80616fab565b5b6000617d8f8a828b01617a5f565b9750506020617da08a828b016176df565b9650506040617db18a828b01617a9d565b9550506060617dc28a828b01617adb565b9450506080617dd38a828b01617146565b93505060a0617de48a828b01617091565b92505060c0617df58a828b01617091565b91505092959891949750929550565b60008083601f840112617e1a57617e196177ea565b5b8235905067ffffffffffffffff811115617e3757617e36617b57565b5b602083019150836020820283011115617e5357617e526178a7565b5b9250929050565b60008083601f840112617e7057617e6f6177ea565b5b8235905067ffffffffffffffff811115617e8d57617e8c617b57565b5b602083019150836001820283011115617ea957617ea86178a7565b5b9250929050565b60008060008060008060008060a0898b031215617ed057617ecf616fab565b5b6000617ede8b828c01617146565b9850506020617eef8b828c01617146565b975050604089013567ffffffffffffffff811115617f1057617f0f616fb0565b5b617f1c8b828c01617e04565b9650965050606089013567ffffffffffffffff811115617f3f57617f3e616fb0565b5b617f4b8b828c01617e04565b9450945050608089013567ffffffffffffffff811115617f6e57617f6d616fb0565b5b617f7a8b828c01617e5a565b92509250509295985092959890939650565b617f9581616fb5565b82525050565b6000602082019050617fb06000830184617f8c565b92915050565b60008060408385031215617fcd57617fcc616fab565b5b6000617fdb85828601617146565b9250506020617fec85828601617091565b9150509250929050565b60008060006060848603121561800f5761800e616fab565b5b600061801d86828701617146565b935050602061802e86828701617146565b925050604061803f86828701617091565b9150509250925092565b60008060008060008060a0878903121561806657618065616fab565b5b600061807489828a01617146565b965050602061808589828a01617146565b955050604061809689828a01617091565b94505060606180a789828a01617091565b935050608087013567ffffffffffffffff8111156180c8576180c7616fb0565b5b6180d489828a01617e5a565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061811d82617070565b915061812883617070565b925082820261813681617070565b9150828204841483151761814d5761814c6180e3565b5b5092915050565b6000815190506181638161707a565b92915050565b60006020828403121561817f5761817e616fab565b5b600061818d84828501618154565b91505092915050565b6000815190506181a58161744e565b92915050565b6000602082840312156181c1576181c0616fab565b5b60006181cf84828501618196565b91505092915050565b60006181e382617070565b91506181ee83617070565b9250828203905081811115618206576182056180e3565b5b92915050565b60008160011c9050919050565b6000808291508390505b60018511156182635780860481111561823f5761823e6180e3565b5b600185161561824e5780820291505b808102905061825c8561820c565b9450618223565b94509492505050565b60008261827c5760019050618338565b8161828a5760009050618338565b81600181146182a057600281146182aa576182d9565b6001915050618338565b60ff8411156182bc576182bb6180e3565b5b8360020a9150848211156182d3576182d26180e3565b5b50618338565b5060208310610133831016604e8410600b841016171561830e5782820a905083811115618309576183086180e3565b5b618338565b61831b8484846001618219565b92509050818404811115618332576183316180e3565b5b81810290505b9392505050565b600061834a82617070565b915061835583617070565b92506183827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461826c565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006183c482617070565b91506183cf83617070565b9250826183df576183de61838a565b5b828204905092915050565b60006040820190506183ff60008301856173d7565b61840c60208301846170d3565b9392505050565b600082825260208201905092915050565b50565b6000618434600083618413565b915061843f82618424565b600082019050919050565b600060a08201905061845f60008301876173d7565b61846c60208301866173d7565b61847960408301856170d3565b61848660608301846170d3565b818103608083015261849781618427565b905095945050505050565b600082825260208201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061850f602f836184a2565b915061851a826184b3565b604082019050919050565b6000602082019050818103600083015261853e81618502565b9050919050565b600061855082617070565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203618582576185816180e3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006185c782617c2b565b6185d18185618413565b93506185e1818560208601617c47565b6185ea816177ef565b840191505092915050565b600060a08201905061860a60008301886173d7565b61861760208301876173d7565b81810360408301526186298186617357565b9050818103606083015261863d8185617357565b9050818103608083015261865181846185bc565b90509695505050505050565b600060a08201905081810360008301526186778188617357565b9050818103602083015261868b8187617357565b9050818103604083015261869f8186617357565b905081810360608301526186b38185617357565b90506186c260808301846170d3565b9695505050505050565b6000819050919050565b60006186f16186ec6186e7846170fd565b6186cc565b6170fd565b9050919050565b6000618703826186d6565b9050919050565b6000618715826186f8565b9050919050565b6187258161870a565b82525050565b6000618736826186f8565b9050919050565b6187468161872b565b82525050565b6000618757826186f8565b9050919050565b6187678161874c565b82525050565b6000618778826186f8565b9050919050565b6187888161876d565b82525050565b60006080820190506187a3600083018761871c565b6187b0602083018661873d565b6187bd604083018561875e565b6187ca606083018461877f565b95945050505050565b60006187de82617070565b91506187e983617070565b9250828201905080821115618801576188006180e3565b5b92915050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261883357618832618807565b5b80840192508235915067ffffffffffffffff8211156188555761885461880c565b5b60208301925060018202360383131561887157618870618811565b5b509250929050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006188d5602e836184a2565b91506188e082618879565b604082019050919050565b60006020820190508181036000830152618904816188c8565b9050919050565b6000819050919050565b600061893061892b6189268461890b565b6186cc565b617441565b9050919050565b61894081618915565b82525050565b600060208201905061895b6000830184618937565b92915050565b7f4d61726b65743a2053656e646572206e6f742052656d6f76616c000000000000600082015250565b6000618997601a836184a2565b91506189a282618961565b602082019050919050565b600060208201905081810360008301526189c68161898a565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000618a036010836184a2565b9150618a0e826189cd565b602082019050919050565b60006020820190508181036000830152618a32816189f6565b9050919050565b6000618a4482617441565b9150618a4f83617441565b9250828203905060ff811115618a6857618a676180e3565b5b92915050565b6000618a7982617070565b9150618a8483617070565b925082618a9457618a9361838a565b5b828206905092915050565b600060c082019050618ab46000830189617046565b618ac160208301886173d7565b618ace60408301876170d3565b618adb60608301866173d7565b618ae860808301856170d3565b618af560a08301846170d3565b979650505050505050565b6000604082019050618b1560008301856173d7565b618b2260208301846173d7565b9392505050565b618b328161703a565b8114618b3d57600080fd5b50565b600081519050618b4f81618b29565b92915050565b600060208284031215618b6b57618b6a616fab565b5b6000618b7984828501618b40565b91505092915050565b618b8b81617441565b82525050565b600060e082019050618ba6600083018a6173d7565b618bb360208301896173d7565b618bc060408301886170d3565b618bcd60608301876170d3565b618bda6080830186618b82565b618be760a08301856172a0565b618bf460c08301846172a0565b98975050505050505050565b6000618c1b618c16618c1184617441565b6186cc565b617070565b9050919050565b618c2b81618c00565b82525050565b6000602082019050618c466000830184618c22565b92915050565b6000602082019050618c61600083018461875e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600081519050618ca58161712f565b92915050565b600060208284031215618cc157618cc0616fab565b5b6000618ccf84828501618c96565b91505092915050565b6000606082019050618ced6000830186618c22565b618cfa60208301856173d7565b618d0760408301846173d7565b949350505050565b6000604082019050618d2460008301856170d3565b618d3160208301846170d3565b9392505050565b6000606082019050618d4d60008301866173d7565b618d5a60208301856173d7565b618d6760408301846170d3565b949350505050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000618dcb6026836184a2565b9150618dd682618d6f565b604082019050919050565b60006020820190508181036000830152618dfa81618dbe565b9050919050565b600081905092915050565b6000618e1782617c2b565b618e218185618e01565b9350618e31818560208601617c47565b80840191505092915050565b6000618e498284618e0c565b915081905092915050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000618eb0602b836184a2565b9150618ebb82618e54565b604082019050919050565b60006020820190508181036000830152618edf81618ea3565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000618f27601783618ee6565b9150618f3282618ef1565b601782019050919050565b600081519050919050565b6000618f5382618f3d565b618f5d8185618ee6565b9350618f6d818560208601617c47565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000618faf601183618ee6565b9150618fba82618f79565b601182019050919050565b6000618fd082618f1a565b9150618fdc8285618f48565b9150618fe782618fa2565b9150618ff38284618f48565b91508190509392505050565b600061900a82618f3d565b61901481856184a2565b9350619024818560208601617c47565b61902d816177ef565b840191505092915050565b600060208201905081810360008301526190528184618fff565b905092915050565b600061906582617070565b915060008203619078576190776180e3565b5b600182039050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006190b96014836184a2565b91506190c482619083565b602082019050919050565b600060208201905081810360008301526190e8816190ac565b9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006191256020836184a2565b9150619130826190ef565b602082019050919050565b6000602082019050818103600083015261915481619118565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220349b8a49001aab48e2791b560e81d457b94063a6057795435cfa6bffb8c6153264736f6c63430008110033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061025c5760003560e01c806301ffc9a71461026157806302e0affa14610291578063069a9e4f146102c15780630ed1f1eb146102dd5780631ce08c0b146102f9578063248a9ca31461032957806325fbff7a146103595780632c9fcbd7146103895780632e1a7d4d146103a75780632f2ff15d146103c35780633030b532146103df57806332786049146103fd57806336568abe1461041957806337bdc99b146104355780633f4ba83a14610451578063453aabc31461045b57806346e738f31461047757806347883bce146104a75780634b66f665146104c3578063596abe94146104e15780635c975abb146104ff5780636cf250e21461051d57806374d3627b1461053b5780637f49f738146105575780638456cb591461057557806384e043221461057f578063856e115a1461059b57806385d3d64b146105b75780638c6b8d98146105d55780639010d07c146105f157806391d14854146106215780639d1fbcf514610651578063a12d687414610681578063a217fddf1461069d578063a5758566146106bb578063a8f881c0146106eb578063ac9650d814610709578063b33f952714610739578063b905425714610755578063bc197c8114610773578063c0c7028c146107a3578063ca15c873146107d3578063d004f0f714610803578063d41436ce1461081f578063d547741f1461083b578063d6f0d39f14610857578063d797462f14610875578063dfa4bb0f14610891578063e63ab1e9146108c1578063e7f78c72146108df578063f23a6e61146108fd578063f9c285281461092d575b600080fd5b61027b6004803603810190610276919061700d565b610949565b6040516102889190617055565b60405180910390f35b6102ab60048036038101906102a691906170a6565b61095b565b6040516102b891906170e2565b60405180910390f35b6102db60048036038101906102d6919061715b565b610a03565b005b6102f760048036038101906102f291906171d6565b610ada565b005b610313600480360381019061030e91906170a6565b610baf565b60405161032091906170e2565b60405180910390f35b610343600480360381019061033e9190617273565b610c8d565b60405161035091906172af565b60405180910390f35b610373600480360381019061036e91906172ca565b610cad565b60405161038091906173b5565b60405180910390f35b610391610d04565b60405161039e91906173e6565b60405180910390f35b6103c160048036038101906103bc91906170a6565b610d2f565b005b6103dd60048036038101906103d89190617401565b610ec8565b005b6103e7610ee9565b6040516103f491906172af565b60405180910390f35b610417600480360381019061041291906170a6565b610f0d565b005b610433600480360381019061042e9190617401565b610fbd565b005b61044f600480360381019061044a91906170a6565b611040565b005b61045961119e565b005b6104756004803603810190610470919061747a565b6111d3565b005b610491600480360381019061048c91906170a6565b611311565b60405161049e91906170e2565b60405180910390f35b6104c160048036038101906104bc919061751c565b6113b5565b005b6104cb611470565b6040516104d891906173e6565b60405180910390f35b6104e961149b565b6040516104f6919061762d565b60405180910390f35b61050761199c565b6040516105149190617055565b60405180910390f35b6105256119b3565b60405161053291906170e2565b60405180910390f35b6105556004803603810190610550919061764f565b6119be565b005b61055f611a97565b60405161056c91906173e6565b60405180910390f35b61057d611ac2565b005b610599600480360381019061059491906176f4565b611af7565b005b6105b560048036038101906105b09190617734565b611b40565b005b6105bf611c79565b6040516105cc91906173e6565b60405180910390f35b6105ef60048036038101906105ea9190617943565b611ca4565b005b61060b600480360381019061060691906179f6565b6120f2565b60405161061891906173e6565b60405180910390f35b61063b60048036038101906106369190617401565b612121565b6040516106489190617055565b60405180910390f35b61066b600480360381019061066691906170a6565b61218c565b60405161067891906170e2565b60405180910390f35b61069b60048036038101906106969190617af0565b61226a565b005b6106a5612457565b6040516106b291906172af565b60405180910390f35b6106d560048036038101906106d091906170a6565b61245e565b6040516106e291906170e2565b60405180910390f35b6106f3612586565b60405161070091906170e2565b60405180910390f35b610723600480360381019061071e9190617bb2565b612591565b6040516107309190617d40565b60405180910390f35b610753600480360381019061074e9190617d62565b61269d565b005b61075d612a54565b60405161076a91906170e2565b60405180910390f35b61078d60048036038101906107889190617eb0565b612a5f565b60405161079a9190617f9b565b60405180910390f35b6107bd60048036038101906107b891906170a6565b612b59565b6040516107ca91906170e2565b60405180910390f35b6107ed60048036038101906107e89190617273565b612c0f565b6040516107fa91906170e2565b60405180910390f35b61081d60048036038101906108189190617fb6565b612c33565b005b61083960048036038101906108349190617ff6565b612cec565b005b61085560048036038101906108509190617401565b612dc3565b005b61085f612de4565b60405161086c91906172af565b60405180910390f35b61088f600480360381019061088a91906170a6565b612e08565b005b6108ab60048036038101906108a691906170a6565b612e7d565b6040516108b891906170e2565b60405180910390f35b6108c9612f27565b6040516108d691906172af565b60405180910390f35b6108e7612f4b565b6040516108f491906173e6565b60405180910390f35b61091760048036038101906109129190618049565b612f76565b6040516109249190617f9b565b60405180910390f35b610947600480360381019061094291906172ca565b613035565b005b60006109548261314a565b9050919050565b60006109fc6127106101315460646109739190618112565b3073ffffffffffffffffffffffffffffffffffffffff16639d1fbcf5866040518263ffffffff1660e01b81526004016109ac91906170e2565b602060405180830381865afa1580156109c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ed9190618169565b6131c49092919063ffffffff16565b9050919050565b610a0b61329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1610a35816132e9565b610a3e846132fd565b600080600080610a4f898989613421565b9350935093509350610ace6040518061012001604052806000151581526020018881526020018a81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b50505050505050505050565b610ae261329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1610b0c816132e9565b610b15836132fd565b600080600080610b2588886136c2565b9350935093509350610ba46040518061012001604052806000151581526020018881526020018981526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b505050505050505050565b60008061012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4491906181ab565b60ff16905060128103610c5a5782915050610c88565b6000816012610c6991906181d8565b905080600a610c78919061833f565b84610c8391906183b9565b925050505b919050565b600060976000838152602001908152602001600020600101549050919050565b6060600061013760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610cfc81613797565b915050919050565b600061012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d3761329f565b6000610d42826138e5565b9050610d4d816138fb565b15610e9257610d5c8282613a1f565b61012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30838561012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e30896040518363ffffffff1660e01b8152600401610dfb9291906183ea565b602060405180830381865afa158015610e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3c9190618169565b6040518563ffffffff1660e01b8152600401610e5b949392919061844a565b600060405180830381600087803b158015610e7557600080fd5b505af1158015610e89573d6000803e3d6000fd5b50505050610ec4565b6040517f60b39bc500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b610ed182610c8d565b610eda816132e9565b610ee48383613acc565b505050565b7f26a560d834a19637eccba4611bbc09fb32970bb627da0a70f14f83fdc9822cbc81565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1610f37816132e9565b610f3f61329f565b6064821115610f7a576040517fedb7340700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81610133819055507fb9768ed0b3c8d7421842f14094358b08617bad6081b469cd89de35a8d466785882604051610fb191906170e2565b60405180910390a15050565b610fc5613ae2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102990618525565b60405180910390fd5b61103c8282613aea565b5050565b61104861329f565b61012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661108a613ae2565b73ffffffffffffffffffffffffffffffffffffffff16146110d7576040517f9a5ed74b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110e2826138e5565b9050600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e30856040518363ffffffff1660e01b81526004016111439291906183ea565b602060405180830381865afa158015611160573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111849190618169565b905060008103611199576111988383613a1f565b5b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111c8816132e9565b6111d0613b00565b50565b6111db61329f565b6111e4856132fd565b6000806000806111fb6111f5613ae2565b8a6136c2565b935093509350935061128a8a3073ffffffffffffffffffffffffffffffffffffffff1663a57585668c6040518263ffffffff1660e01b815260040161124091906170e2565b602060405180830381865afa15801561125d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112819190618169565b8a8a8a8a613b63565b6113046040518061012001604052806001151581526020016101335481526020018b81526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b5050505050505050505050565b600061131c826132fd565b3073ffffffffffffffffffffffffffffffffffffffff16631ce08c0b611351610131546064866131c49092919063ffffffff16565b6040518263ffffffff1660e01b815260040161136d91906170e2565b602060405180830381865afa15801561138a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ae9190618169565b9050919050565b6113bd61329f565b6113c6826132fd565b6000806000806113de6113d7613ae2565b8787613421565b9350935093509350611467604051806101200160405280600115158152602001610133548152602001888152602001611415613ae2565b73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b50505050505050565b600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060008073ffffffffffffffffffffffffffffffffffffffff16610136600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b757600190506000610136600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b61013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116b55761013660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816116ae90618545565b91506115e8565b505b60008167ffffffffffffffff8111156116d3576116d2617800565b5b6040519080825280602002602001820160405280156117015781602001602082028036833780820191505090505b509050600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061013660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050905060005b8481101561199157828482815181106118465761184561858d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508160200151925061013660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505091508061198a90618545565b905061182a565b508294505050505090565b6000603360009054906101000a900460ff16905090565b600061013354905090565b6119c661329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e16119f0816132e9565b6119f9836132fd565b600080600080611a0a888888613421565b9350935093509350611a8c6040518061012001604052806000151581526020016101335481526020018981526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b505050505050505050565b600061013260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611aec816132e9565b611af4613c05565b50565b611aff61329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1611b29816132e9565b611b3283613c68565b611b3b82613daf565b505050565b611b4861329f565b611b51866132fd565b600080600080611b628b8b8b613421565b9350935093509350611bf18b3073ffffffffffffffffffffffffffffffffffffffff1663a57585668d6040518263ffffffff1660e01b8152600401611ba791906170e2565b602060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190618169565b8a8a8a8a613b63565b611c6b6040518061012001604052806001151581526020016101335481526020018c81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b505050505050505050505050565b600061013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611cac61329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1611cd6816132e9565b600061012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2f3ea43876040518263ffffffff1660e01b8152600401611d3491906170e2565b602060405180830381865afa158015611d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d759190618169565b03611db757846040517fb281ad80000000000000000000000000000000000000000000000000000000008152600401611dae91906170e2565b60405180910390fd5b600061012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd39c7506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b9190618169565b905080851115611e87576040517fb106efdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663964eec706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1b9190618169565b9050611f278682613df1565b600080600080611f368a613e2f565b93509350935093506000611f566000868661442e9092919063ffffffff16565b90506000611f706000878661442e9092919063ffffffff16565b9050611f7d8c828c6144d7565b611f8c60008f8885858861453e565b61012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632eb2c2d63061012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858560016040516020016120049190617055565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016120339594939291906185f5565b600060405180830381600087803b15801561204d57600080fd5b505af1158015612061573d6000803e3d6000fd5b5050505061012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168d7f40a27cbb002b48214250b00c6c1b15ff8276b363217ca42c7b1720bcf269a76c84848f8f610131546040516120da95949392919061865d565b60405180910390a35050505050505050505050505050565b60006121198260c96000868152602001908152602001600020614edf90919063ffffffff16565b905092915050565b60006097600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008061012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222191906181ab565b60ff169050601281036122375782915050612265565b600081601261224691906181d8565b905080600a612255919061833f565b846122609190618112565b925050505b919050565b6000801b612277816132e9565b61227f61329f565b8461012d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508361012e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508261012f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508161013060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99ad00cf49121d7da2a94fdef5f9ef6c736c933295dcb1cfdfc509905fd89f3161012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051612448949392919061878e565b60405180910390a15050505050565b6000801b81565b6000612469826132fd565b3073ffffffffffffffffffffffffffffffffffffffff1663dfa4bb0f836040518263ffffffff1660e01b81526004016124a291906170e2565b602060405180830381865afa1580156124bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e39190618169565b3073ffffffffffffffffffffffffffffffffffffffff16631ce08c0b612518610131546064876131c49092919063ffffffff16565b6040518263ffffffff1660e01b815260040161253491906170e2565b602060405180830381865afa158015612551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125759190618169565b61257f91906187d3565b9050919050565b600061013154905090565b60608282905067ffffffffffffffff8111156125b0576125af617800565b5b6040519080825280602002602001820160405280156125e357816020015b60608152602001906001900390816125ce5790505b50905060005b83839050811015612696576126653085858481811061260b5761260a61858d565b5b905060200281019061261d9190618816565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050614ef9565b8282815181106126785761267761858d565b5b6020026020010181905250808061268e90618545565b9150506125e9565b5092915050565b60008060019054906101000a900460ff161590508080156126ce5750600160008054906101000a900460ff1660ff16105b806126fb57506126dd30614fdd565b1580156126fa5750600160008054906101000a900460ff1660ff16145b5b61273a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612731906188eb565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015612777576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127dd576040517fb79b591400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127e5615000565b6127ed615051565b6127f56150a2565b6127fd61510e565b61280561515f565b61280d6151b0565b8761012d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508561012e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508461013060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082610133819055508361013260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600061013481905550600061013560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061297287613c68565b61297b82613daf565b61298f6000801b61298a613ae2565b613acc565b6129c07f26a560d834a19637eccba4611bbc09fb32970bb627da0a70f14f83fdc9822cbc6129bb613ae2565b613acc565b6129f17f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e16129ec613ae2565b613acc565b8015612a4a5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051612a419190618946565b60405180910390a15b5050505050505050565b600061013454905090565b6000612a6961329f565b61012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612aab613ae2565b73ffffffffffffffffffffffffffffffffffffffff1614612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af8906189ad565b60405180910390fd5b60005b87879050811015612b4257612b31888883818110612b2557612b2461858d565b5b90506020020135615201565b80612b3b90618545565b9050612b04565b5063bc197c8160e01b905098975050505050505050565b6000612c0861271061013154610133546064612b7591906187d3565b612b7f9190618112565b3073ffffffffffffffffffffffffffffffffffffffff16639d1fbcf5866040518263ffffffff1660e01b8152600401612bb891906170e2565b602060405180830381865afa158015612bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf99190618169565b6131c49092919063ffffffff16565b9050919050565b6000612c2c60c96000848152602001908152602001600020615349565b9050919050565b612c3b61329f565b612c44816132fd565b600080600080612c5b612c55613ae2565b866136c2565b9350935093509350612ce4604051806101200160405280600115158152602001610133548152602001878152602001612c92613ae2565b73ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b505050505050565b612cf461329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1612d1e816132e9565b612d27826132fd565b600080600080612d3787876136c2565b9350935093509350612db96040518061012001604052806000151581526020016101335481526020018881526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815250613540565b5050505050505050565b612dcc82610c8d565b612dd5816132e9565b612ddf8383613aea565b505050565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e181565b612e1061329f565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1612e3a816132e9565b81610134819055507fa01a3b548ccd65893a6acee4ea0da2602fbd2aef7e3040483b026d9544d8074c82604051612e7191906170e2565b60405180910390a15050565b60003073ffffffffffffffffffffffffffffffffffffffff16631ce08c0b612ec36101335461013154612eb09190618112565b612710866131c49092919063ffffffff16565b6040518263ffffffff1660e01b8152600401612edf91906170e2565b602060405180830381865afa158015612efc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f209190618169565b9050919050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b600061012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612f8061329f565b61012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fc2613ae2565b73ffffffffffffffffffffffffffffffffffffffff1614613018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300f906189ad565b60405180910390fd5b61302185615201565b63f23a6e6160e01b90509695505050505050565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e161305f816132e9565b61306761329f565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130cd576040517fb79b591400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8161013260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe846164b6756d387276a93f2200cfd28f5792fffe3530e65d95d7535cd43dab48260405161313e91906173e6565b60405180910390a15050565b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806131bd57506131bc8261535e565b5b9050919050565b60008060008019858709858702925082811083820303915050600081036131ff578382816131f5576131f461838a565b5b0492505050613298565b80841161320b57600080fd5b60008486880990508281118203915080830392506000600186190186169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b6132a761199c565b156132e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132de90618a19565b60405180910390fd5b565b6132fa816132f5613ae2565b6153d8565b50565b60006002905060008161012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613374573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339891906181ab565b60126133a49190618a39565b60ff166133b191906187d3565b905060008314806133da5750600081600a6133cc919061833f565b846133d79190618a6e565b14155b1561341c57826040517f277f4c2700000000000000000000000000000000000000000000000000000000815260040161341391906170e2565b60405180910390fd5b505050565b600060608060606134c4878761012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663964eec706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561349b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bf9190618169565b61545d565b6134ce86866154de565b809450819550829650505050613535858567ffffffffffffffff8111156134f8576134f7617800565b5b6040519080825280602002602001820160405280156135265781602001602082028036833780820191505090505b5061586790919063ffffffff16565b905093509350935093565b600061356060008360a001518460c0015161442e9092919063ffffffff16565b9050600061358260008460a001518560e0015161442e9092919063ffffffff16565b90506135a3836000015184606001518560a00151858588610100015161453e565b6000808460800151856040015161012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101315488602001516040516020016135f296959493929190618a9f565b604051602081830303815290604052905061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632eb2c2d63061012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168686866040518663ffffffff1660e01b815260040161368a9594939291906185f5565b600060405180830381600087803b1580156136a457600080fd5b505af11580156136b8573d6000803e3d6000fd5b5050505050505050565b60006060806060600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663964eec706040518163ffffffff1660e01b8152600401602060405180830381865afa158015613739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375d9190618169565b90506137698682613df1565b61377487878361545d565b61377d86613e2f565b809550819650829750839850505050505092959194509250565b606060008260020154905060008060009050600080866001015490505b8481116137f95786600001600082815260200190815260200160002093506137db846158e3565b836137e691906187d3565b9250806137f290618545565b90506137b4565b5060008267ffffffffffffffff81111561381657613815617800565b5b6040519080825280602002602001820160405280156138445781602001602082028036833780820191505090505b5090506000876001015490505b8581116138d757876000016000828152602001908152602001600020945060005b61387b866158e3565b8110156138c55761389581876158f890919063ffffffff16565b8385806001019650815181106138ae576138ad61858d565b5b602002602001018181525050806001019050613872565b50806138d090618545565b9050613851565b508095505050505050919050565b60006138f48260146004615912565b9050919050565b60008173ffffffffffffffffffffffffffffffffffffffff1661391c613ae2565b73ffffffffffffffffffffffffffffffffffffffff16148061396b575061396a7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1613965613ae2565b612121565b5b80613a18575061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c5836139b9613ae2565b6040518363ffffffff1660e01b81526004016139d6929190618b00565b602060405180830381865afa1580156139f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a179190618b55565b5b9050919050565b613a718261013760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061597690919063ffffffff16565b613ab961013760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020615b39565b15613ac857613ac781615b49565b5b5050565b613ad461329f565b613ade8282615f82565b5050565b600033905090565b613af261329f565b613afc8282615fb6565b5050565b613b08615fea565b6000603360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613b4c613ae2565b604051613b5991906173e6565b60405180910390a1565b61012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d505accf873088888888886040518863ffffffff1660e01b8152600401613bcb9796959493929190618b91565b600060405180830381600087803b158015613be557600080fd5b505af1158015613bf9573d6000803e3d6000fd5b50505050505050505050565b613c0d61329f565b6001603360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613c51613ae2565b604051613c5e91906173e6565b60405180910390a1565b60008173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cd991906181ab565b905060128160ff161180613cf0575060068160ff16105b15613d3257806040517f094d18ae000000000000000000000000000000000000000000000000000000008152600401613d299190618c31565b60405180910390fd5b8161012f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f94e2ca3c006ff5152db658db7f198e3606e0c8584958dbb13538cdd9b30ccb7282604051613da39190618c4c565b60405180910390a15050565b80610131819055507f36a09eaea278b547d70faf65508009f5a7d32dfd33d27131e792f7e78bb4215881604051613de691906170e2565b60405180910390a150565b80821115613e2b576040517f33aa101c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b600060608060606000859050600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663789e8cdf306040518263ffffffff1660e01b8152600401613e9991906173e6565b602060405180830381865afa158015613eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eda9190618169565b90508067ffffffffffffffff811115613ef657613ef5617800565b5b604051908082528060200260200182016040528015613f245781602001602082028036833780820191505090505b5094508067ffffffffffffffff811115613f4157613f40617800565b5b604051908082528060200260200182016040528015613f6f5781602001602082028036833780820191505090505b5093508067ffffffffffffffff811115613f8c57613f8b617800565b5b604051908082528060200260200182016040528015613fba5781602001602082028036833780820191505090505b5092506000955060005b81811015614424576000614039610137600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020616033565b9050600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e30846040518363ffffffff1660e01b815260040161409a9291906183ea565b602060405180830381865afa1580156140b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140db9190618169565b90508085101561419f5781888a815181106140f9576140f861858d565b5b60200260200101818152505084878a815181106141195761411861858d565b5b60200260200101818152505061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868a8151811061415c5761415b61858d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600094506143f6565b81888a815181106141b3576141b261858d565b5b60200260200101818152505080878a815181106141d3576141d261858d565b5b60200260200101818152505061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868a815181106142165761421561858d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808561425c91906181d8565b9450600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506142b38361013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613a1f565b61013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156143e6575061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610136600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156143f4576143f3616068565b5b505b8861440090618545565b985060008503614411575050614424565b50508061441d90618545565b9050613fc4565b5050509193509193565b60608183111561444157614440618c67565b5b835182111561445357614452618c67565b5b600083830390508067ffffffffffffffff81111561447457614473617800565b5b6040519080825280602002602001820160405280156144a25781602001602082028036833780820191505090505b50915060015b600182018110156144ce57808501602002860151816020028401526001810190506144a8565b50509392505050565b60006144e283616132565b905060006144ef83616132565b905080821415806145005750848214155b15614537576040517f49f82da600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60008060008060005b88811015614ed25761012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b776d3338983815181106145a1576145a061858d565b5b60200260200101516040518263ffffffff1660e01b81526004016145c591906170e2565b602060405180830381865afa1580156145e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061460691906181ab565b93503073ffffffffffffffffffffffffffffffffffffffff16631ce08c0b6146576101315460648b86815181106146405761463f61858d565b5b60200260200101516131c49092919063ffffffff16565b6040518263ffffffff1660e01b815260040161467391906170e2565b602060405180830381865afa158015614690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b49190618169565b915060008460ff161115614c32573073ffffffffffffffffffffffffffffffffffffffff16631ce08c0b6147208660ff16610131546146f39190618112565b6127108b86815181106147095761470861858d565b5b60200260200101516131c49092919063ffffffff16565b6040518263ffffffff1660e01b815260040161473c91906170e2565b602060405180830381865afa158015614759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477d9190618169565b9250828261478b91906181d8565b915061012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663440f5fd26040518163ffffffff1660e01b8152600401602060405180830381865afa158015614835573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148599190618cab565b73ffffffffffffffffffffffffffffffffffffffff1614614992578781815181106148875761488661858d565b5b6020026020010151837ff13b9ad9c5cff251c7890be98dd7159a5dde3f28cba336aeaaf551d9da06e7e08661013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663440f5fd26040518163ffffffff1660e01b8152600401602060405180830381865afa158015614920573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149449190618cab565b61012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161497793929190618cd8565b60405180910390a3828261498b91906187d3565b9150614c31565b61013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631b2ef1ca848a84815181106149e5576149e461858d565b5b60200260200101516040518363ffffffff1660e01b8152600401614a0a929190618d0f565b600060405180830381600087803b158015614a2457600080fd5b505af1925050508015614a35575060015b614b3057878181518110614a4c57614a4b61858d565b5b6020026020010151837fc63600d29a0ef31fe04e22e26a10c75787f6f15d8a95f6b340b232481bf6d69660405160405180910390a361013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c309f8e1878381518110614ad357614ad261858d565b5b6020026020010151856040518363ffffffff1660e01b8152600401614af99291906183ea565b600060405180830381600087803b158015614b1357600080fd5b505af1158015614b27573d6000803e3d6000fd5b50505050614b31565b5b61012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8b61013060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b8152600401614bb493929190618d38565b6020604051808303816000875af1158015614bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bf79190618b55565b945084614c30576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b8a15614dcb5761012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8b61013260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1663dfa4bb0f8c8781518110614ccb57614cca61858d565b5b60200260200101516040518263ffffffff1660e01b8152600401614cef91906170e2565b602060405180830381865afa158015614d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d309190618169565b6040518463ffffffff1660e01b8152600401614d4e93929190618d38565b6020604051808303816000875af1158015614d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d919190618b55565b945084614dca576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b61012f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8b888481518110614e1e57614e1d61858d565b5b6020026020010151856040518463ffffffff1660e01b8152600401614e4593929190618d38565b6020604051808303816000875af1158015614e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e889190618b55565b945084614ec1576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80614ecb90618545565b9050614547565b5050505050505050505050565b6000614eee8360000183616171565b60001c905092915050565b6060614f0483614fdd565b614f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614f3a90618de1565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1684604051614f6b9190618e3d565b600060405180830381855af49150503d8060008114614fa6576040519150601f19603f3d011682016040523d82523d6000602084013e614fab565b606091505b5091509150614fd3828260405180606001604052806027815260200161918b6027913961619c565b9250505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff1661504f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161504690618ec6565b60405180910390fd5b565b600060019054906101000a900460ff166150a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161509790618ec6565b60405180910390fd5b565b600060019054906101000a900460ff166150f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150e890618ec6565b60405180910390fd5b6000603360006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff1661515d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161515490618ec6565b60405180910390fd5b565b600060019054906101000a900460ff166151ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016151a590618ec6565b60405180910390fd5b565b600060019054906101000a900460ff166151ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016151f690618ec6565b60405180910390fd5b565b600061520c826138e5565b90506152608261013760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206161be90919063ffffffff16565b600073ffffffffffffffffffffffffffffffffffffffff1661013660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036153015761530081616253565b5b8073ffffffffffffffffffffffffffffffffffffffff16827f3f2e35daa045b6aa1cc1d76e5337f2bce6985b354b49e998d4ce29d683190d1560405160405180910390a35050565b6000615357826000016167f4565b9050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806153d157506153d082616805565b5b9050919050565b6153e28282612121565b615459576153ef8161686f565b6153fd8360001c602061689c565b60405160200161540e929190618fc5565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154509190619038565b60405180910390fd5b5050565b60006154698284616ad8565b915050610134548110156154d8576154a17f26a560d834a19637eccba4611bbc09fb32970bb627da0a70f14f83fdc9822cbc85612121565b6154d7576040517f9ece8f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6000606080600061013760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080826002015490506000836001015490505b81811161557d5761555f8460000160008381526020019081526020016000206158e3565b8361556a91906187d3565b92508061557690618545565b905061553b565b50600082036155b8576040517f33aa101c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008890508267ffffffffffffffff8111156155d7576155d6617800565b5b6040519080825280602002602001820160405280156156055781602001602082028036833780820191505090505b5095508267ffffffffffffffff81111561562257615621617800565b5b6040519080825280602002602001820160405280156156505781602001602082028036833780820191505090505b5094506000965060005b8381101561585b57600061566d86616033565b9050600061012d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e30846040518363ffffffff1660e01b81526004016156ce9291906183ea565b602060405180830381865afa1580156156eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061570f9190618169565b9050808410156157625781898b8151811061572d5761572c61858d565b5b60200260200101818152505083888b8151811061574d5761574c61858d565b5b6020026020010181815250506000935061582d565b60018661576f91906181d8565b8a14801561577c57508084115b156157b3576040517f33aa101c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81898b815181106157c7576157c661858d565b5b60200260200101818152505080888b815181106157e7576157e661858d565b5b60200260200101818152505080846157ff91906181d8565b9350615814828861597690919063ffffffff16565b61581d87615b39565b1561582c5761582b8b615b49565b5b5b8961583790618545565b99506000840361584857505061585b565b50508061585490618545565b905061565a565b50505050509250925092565b60606000835190508067ffffffffffffffff81111561588957615888617800565b5b6040519080825280602002602001820160405280156158b75781602001602082028036833780820191505090505b50915060015b600182018110156158db5783816020028401526001810190506158bd565b505092915050565b60006158f1826000016167f4565b9050919050565b60006159078360000183616171565b60001c905092915050565b6000806008836159229190618112565b60016008866159319190618112565b600261593d919061833f565b61594791906181d8565b60001b901b90506000818660001b1690506008846159659190618112565b81901c60001c925050509392505050565b600061598182616b00565b61ffff1690506159ae82846000016000848152602001908152602001600020616b1690919063ffffffff16565b6159f15781816040517fb524f6fe0000000000000000000000000000000000000000000000000000000081526004016159e8929190618d0f565b60405180910390fd5b6159fb8382616b30565b15615b34578260020154836001015403615a47577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836001018190555060008360020181905550615b33565b82600101548103615abd57600060018460010154615a6591906187d3565b90505b83600201548111615ab7576000615a928560000160008481526020019081526020016000206158e3565b1115615aa657808460010181905550615ab7565b80615ab090618545565b9050615a68565b50615b32565b82600201548103615b3157600060018460020154615adb91906181d8565b90505b83600101548110615b2f576000615b088560000160008481526020019081526020016000206158e3565b1115615b1c57808460020181905550615b2f565b8080615b279061905a565b915050615ade565b505b5b5b5b505050565b6000808260020154149050919050565b600061013660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061013660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603615c9457600061013560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615df8565b8061013660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508161013660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603615df757615df6616068565b5b5b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525061013660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd853f0403f99e88d186f52744de8bd40a17410e4d2206e25ac3750410aa1973760405160405180910390a4505050565b615f8c8282616b46565b615fb18160c96000858152602001908152602001600020616c2790919063ffffffff16565b505050565b615fc08282616c57565b615fe58160c96000858152602001908152602001600020616d3990919063ffffffff16565b505050565b615ff261199c565b616031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401616028906190cf565b60405180910390fd5b565b60006160616000836000016000856001015481526020019081526020016000206158f890919063ffffffff16565b9050919050565b610136600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661013560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008151602083016020820281015b8082101561616957838251850194508085101561615d57600080fd5b50602082019150616141565b505050919050565b60008260000182815481106161895761618861858d565b5b9060005260206000200154905092915050565b606083156161ac578290506161b7565b6161b68383616d69565b5b9392505050565b60006161c982616b00565b61ffff1690506161d883615b39565b156161f457808360010181905550808360020181905550616226565b826001015481101561620e57808360010181905550616225565b8260020154811115616224578083600201819055505b5b5b61624d82846000016000848152602001908152602001600020616db990919063ffffffff16565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff1661013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603616474578061013560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808273ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681525061013660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f3a35d42f4bce14f93a24ab2ec3c4dc4cd013e5f16abcd79d5c93afa2cebc0c7260405160405180910390a46167f1565b6000610136600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060405180604001604052808273ffffffffffffffffffffffffffffffffffffffff16815260200161013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525061013660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508161013660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610136600061013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1661013560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f3a35d42f4bce14f93a24ab2ec3c4dc4cd013e5f16abcd79d5c93afa2cebc0c7260405160405180910390a4505b50565b600081600001805490509050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606168958273ffffffffffffffffffffffffffffffffffffffff16601460ff1661689c565b9050919050565b6060600060028360026168af9190618112565b6168b991906187d3565b67ffffffffffffffff8111156168d2576168d1617800565b5b6040519080825280601f01601f1916602001820160405280156169045781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061693c5761693b61858d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106169a05761699f61858d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026169e09190618112565b6169ea91906187d3565b90505b6001811115616a8a577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110616a2c57616a2b61858d565b5b1a60f81b828281518110616a4357616a4261858d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080616a839061905a565b90506169ed565b5060008414616ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401616ac59061913b565b60405180910390fd5b8091505092915050565b60008083831115616aef5760008091509150616af9565b6001838503915091505b9250929050565b6000616b0f826002601c615912565b9050919050565b6000616b28836000018360001b616dd3565b905092915050565b600080616b3d8484616ee7565b14905092915050565b616b508282612121565b616c235760016097600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550616bc8613ae2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000616c4f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b616f0e565b905092915050565b616c618282612121565b15616d355760006097600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550616cda613ae2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000616d61836000018373ffffffffffffffffffffffffffffffffffffffff1660001b616dd3565b905092915050565b600082511115616d7c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401616db09190619038565b60405180910390fd5b6000616dcb836000018360001b616f0e565b905092915050565b60008083600101600084815260200190815260200160002054905060008114616edb576000600182616e0591906181d8565b9050600060018660000180549050616e1d91906181d8565b9050818114616e8c576000866000018281548110616e3e57616e3d61858d565b5b9060005260206000200154905080876000018481548110616e6257616e6161858d565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480616ea057616e9f61915b565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050616ee1565b60009150505b92915050565b6000616f068360000160008481526020019081526020016000206158e3565b905092915050565b6000616f1a8383616f7e565b616f73578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050616f78565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b616fea81616fb5565b8114616ff557600080fd5b50565b60008135905061700781616fe1565b92915050565b60006020828403121561702357617022616fab565b5b600061703184828501616ff8565b91505092915050565b60008115159050919050565b61704f8161703a565b82525050565b600060208201905061706a6000830184617046565b92915050565b6000819050919050565b61708381617070565b811461708e57600080fd5b50565b6000813590506170a08161707a565b92915050565b6000602082840312156170bc576170bb616fab565b5b60006170ca84828501617091565b91505092915050565b6170dc81617070565b82525050565b60006020820190506170f760008301846170d3565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000617128826170fd565b9050919050565b6171388161711d565b811461714357600080fd5b50565b6000813590506171558161712f565b92915050565b600080600080600060a0868803121561717757617176616fab565b5b600061718588828901617146565b955050602061719688828901617146565b94505060406171a788828901617091565b93505060606171b888828901617146565b92505060806171c988828901617091565b9150509295509295909350565b600080600080608085870312156171f0576171ef616fab565b5b60006171fe87828801617146565b945050602061720f87828801617146565b935050604061722087828801617091565b925050606061723187828801617091565b91505092959194509250565b6000819050919050565b6172508161723d565b811461725b57600080fd5b50565b60008135905061726d81617247565b92915050565b60006020828403121561728957617288616fab565b5b60006172978482850161725e565b91505092915050565b6172a98161723d565b82525050565b60006020820190506172c460008301846172a0565b92915050565b6000602082840312156172e0576172df616fab565b5b60006172ee84828501617146565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61732c81617070565b82525050565b600061733e8383617323565b60208301905092915050565b6000602082019050919050565b6000617362826172f7565b61736c8185617302565b935061737783617313565b8060005b838110156173a857815161738f8882617332565b975061739a8361734a565b92505060018101905061737b565b5085935050505092915050565b600060208201905081810360008301526173cf8184617357565b905092915050565b6173e08161711d565b82525050565b60006020820190506173fb60008301846173d7565b92915050565b6000806040838503121561741857617417616fab565b5b60006174268582860161725e565b925050602061743785828601617146565b9150509250929050565b600060ff82169050919050565b61745781617441565b811461746257600080fd5b50565b6000813590506174748161744e565b92915050565b600080600080600080600060e0888a03121561749957617498616fab565b5b60006174a78a828b01617146565b97505060206174b88a828b01617146565b96505060406174c98a828b01617091565b95505060606174da8a828b01617091565b94505060806174eb8a828b01617465565b93505060a06174fc8a828b0161725e565b92505060c061750d8a828b0161725e565b91505092959891949750929550565b60008060006060848603121561753557617534616fab565b5b600061754386828701617146565b935050602061755486828701617091565b925050604061756586828701617146565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6175a48161711d565b82525050565b60006175b6838361759b565b60208301905092915050565b6000602082019050919050565b60006175da8261756f565b6175e4818561757a565b93506175ef8361758b565b8060005b8381101561762057815161760788826175aa565b9750617612836175c2565b9250506001810190506175f3565b5085935050505092915050565b6000602082019050818103600083015261764781846175cf565b905092915050565b6000806000806080858703121561766957617668616fab565b5b600061767787828801617146565b945050602061768887828801617146565b935050604061769987828801617091565b92505060606176aa87828801617146565b91505092959194509250565b60006176c18261711d565b9050919050565b6176d1816176b6565b81146176dc57600080fd5b50565b6000813590506176ee816176c8565b92915050565b6000806040838503121561770b5761770a616fab565b5b6000617719858286016176df565b925050602061772a85828601617091565b9150509250929050565b600080600080600080600080610100898b03121561775557617754616fab565b5b60006177638b828c01617146565b98505060206177748b828c01617146565b97505060406177858b828c01617091565b96505060606177968b828c01617146565b95505060806177a78b828c01617091565b94505060a06177b88b828c01617465565b93505060c06177c98b828c0161725e565b92505060e06177da8b828c0161725e565b9150509295985092959890939650565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b617838826177ef565b810181811067ffffffffffffffff8211171561785757617856617800565b5b80604052505050565b600061786a616fa1565b9050617876828261782f565b919050565b600067ffffffffffffffff82111561789657617895617800565b5b602082029050602081019050919050565b600080fd5b60006178bf6178ba8461787b565b617860565b905080838252602082019050602084028301858111156178e2576178e16178a7565b5b835b8181101561790b57806178f78882617091565b8452602084019350506020810190506178e4565b5050509392505050565b600082601f83011261792a576179296177ea565b5b813561793a8482602086016178ac565b91505092915050565b600080600080600060a0868803121561795f5761795e616fab565b5b600061796d88828901617146565b955050602061797e88828901617091565b945050604061798f88828901617091565b935050606086013567ffffffffffffffff8111156179b0576179af616fb0565b5b6179bc88828901617915565b925050608086013567ffffffffffffffff8111156179dd576179dc616fb0565b5b6179e988828901617915565b9150509295509295909350565b60008060408385031215617a0d57617a0c616fab565b5b6000617a1b8582860161725e565b9250506020617a2c85828601617091565b9150509250929050565b6000617a418261711d565b9050919050565b617a5181617a36565b8114617a5c57600080fd5b50565b600081359050617a6e81617a48565b92915050565b6000617a7f8261711d565b9050919050565b617a8f81617a74565b8114617a9a57600080fd5b50565b600081359050617aac81617a86565b92915050565b6000617abd8261711d565b9050919050565b617acd81617ab2565b8114617ad857600080fd5b50565b600081359050617aea81617ac4565b92915050565b60008060008060808587031215617b0a57617b09616fab565b5b6000617b1887828801617a5f565b9450506020617b2987828801617a9d565b9350506040617b3a878288016176df565b9250506060617b4b87828801617adb565b91505092959194509250565b600080fd5b60008083601f840112617b7257617b716177ea565b5b8235905067ffffffffffffffff811115617b8f57617b8e617b57565b5b602083019150836020820283011115617bab57617baa6178a7565b5b9250929050565b60008060208385031215617bc957617bc8616fab565b5b600083013567ffffffffffffffff811115617be757617be6616fb0565b5b617bf385828601617b5c565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015617c65578082015181840152602081019050617c4a565b60008484015250505050565b6000617c7c82617c2b565b617c868185617c36565b9350617c96818560208601617c47565b617c9f816177ef565b840191505092915050565b6000617cb68383617c71565b905092915050565b6000602082019050919050565b6000617cd682617bff565b617ce08185617c0a565b935083602082028501617cf285617c1b565b8060005b85811015617d2e5784840389528151617d0f8582617caa565b9450617d1a83617cbe565b925060208a01995050600181019050617cf6565b50829750879550505050505092915050565b60006020820190508181036000830152617d5a8184617ccb565b905092915050565b600080600080600080600060e0888a031215617d8157617d80616fab565b5b6000617d8f8a828b01617a5f565b9750506020617da08a828b016176df565b9650506040617db18a828b01617a9d565b9550506060617dc28a828b01617adb565b9450506080617dd38a828b01617146565b93505060a0617de48a828b01617091565b92505060c0617df58a828b01617091565b91505092959891949750929550565b60008083601f840112617e1a57617e196177ea565b5b8235905067ffffffffffffffff811115617e3757617e36617b57565b5b602083019150836020820283011115617e5357617e526178a7565b5b9250929050565b60008083601f840112617e7057617e6f6177ea565b5b8235905067ffffffffffffffff811115617e8d57617e8c617b57565b5b602083019150836001820283011115617ea957617ea86178a7565b5b9250929050565b60008060008060008060008060a0898b031215617ed057617ecf616fab565b5b6000617ede8b828c01617146565b9850506020617eef8b828c01617146565b975050604089013567ffffffffffffffff811115617f1057617f0f616fb0565b5b617f1c8b828c01617e04565b9650965050606089013567ffffffffffffffff811115617f3f57617f3e616fb0565b5b617f4b8b828c01617e04565b9450945050608089013567ffffffffffffffff811115617f6e57617f6d616fb0565b5b617f7a8b828c01617e5a565b92509250509295985092959890939650565b617f9581616fb5565b82525050565b6000602082019050617fb06000830184617f8c565b92915050565b60008060408385031215617fcd57617fcc616fab565b5b6000617fdb85828601617146565b9250506020617fec85828601617091565b9150509250929050565b60008060006060848603121561800f5761800e616fab565b5b600061801d86828701617146565b935050602061802e86828701617146565b925050604061803f86828701617091565b9150509250925092565b60008060008060008060a0878903121561806657618065616fab565b5b600061807489828a01617146565b965050602061808589828a01617146565b955050604061809689828a01617091565b94505060606180a789828a01617091565b935050608087013567ffffffffffffffff8111156180c8576180c7616fb0565b5b6180d489828a01617e5a565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061811d82617070565b915061812883617070565b925082820261813681617070565b9150828204841483151761814d5761814c6180e3565b5b5092915050565b6000815190506181638161707a565b92915050565b60006020828403121561817f5761817e616fab565b5b600061818d84828501618154565b91505092915050565b6000815190506181a58161744e565b92915050565b6000602082840312156181c1576181c0616fab565b5b60006181cf84828501618196565b91505092915050565b60006181e382617070565b91506181ee83617070565b9250828203905081811115618206576182056180e3565b5b92915050565b60008160011c9050919050565b6000808291508390505b60018511156182635780860481111561823f5761823e6180e3565b5b600185161561824e5780820291505b808102905061825c8561820c565b9450618223565b94509492505050565b60008261827c5760019050618338565b8161828a5760009050618338565b81600181146182a057600281146182aa576182d9565b6001915050618338565b60ff8411156182bc576182bb6180e3565b5b8360020a9150848211156182d3576182d26180e3565b5b50618338565b5060208310610133831016604e8410600b841016171561830e5782820a905083811115618309576183086180e3565b5b618338565b61831b8484846001618219565b92509050818404811115618332576183316180e3565b5b81810290505b9392505050565b600061834a82617070565b915061835583617070565b92506183827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461826c565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006183c482617070565b91506183cf83617070565b9250826183df576183de61838a565b5b828204905092915050565b60006040820190506183ff60008301856173d7565b61840c60208301846170d3565b9392505050565b600082825260208201905092915050565b50565b6000618434600083618413565b915061843f82618424565b600082019050919050565b600060a08201905061845f60008301876173d7565b61846c60208301866173d7565b61847960408301856170d3565b61848660608301846170d3565b818103608083015261849781618427565b905095945050505050565b600082825260208201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061850f602f836184a2565b915061851a826184b3565b604082019050919050565b6000602082019050818103600083015261853e81618502565b9050919050565b600061855082617070565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203618582576185816180e3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006185c782617c2b565b6185d18185618413565b93506185e1818560208601617c47565b6185ea816177ef565b840191505092915050565b600060a08201905061860a60008301886173d7565b61861760208301876173d7565b81810360408301526186298186617357565b9050818103606083015261863d8185617357565b9050818103608083015261865181846185bc565b90509695505050505050565b600060a08201905081810360008301526186778188617357565b9050818103602083015261868b8187617357565b9050818103604083015261869f8186617357565b905081810360608301526186b38185617357565b90506186c260808301846170d3565b9695505050505050565b6000819050919050565b60006186f16186ec6186e7846170fd565b6186cc565b6170fd565b9050919050565b6000618703826186d6565b9050919050565b6000618715826186f8565b9050919050565b6187258161870a565b82525050565b6000618736826186f8565b9050919050565b6187468161872b565b82525050565b6000618757826186f8565b9050919050565b6187678161874c565b82525050565b6000618778826186f8565b9050919050565b6187888161876d565b82525050565b60006080820190506187a3600083018761871c565b6187b0602083018661873d565b6187bd604083018561875e565b6187ca606083018461877f565b95945050505050565b60006187de82617070565b91506187e983617070565b9250828201905080821115618801576188006180e3565b5b92915050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261883357618832618807565b5b80840192508235915067ffffffffffffffff8211156188555761885461880c565b5b60208301925060018202360383131561887157618870618811565b5b509250929050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006188d5602e836184a2565b91506188e082618879565b604082019050919050565b60006020820190508181036000830152618904816188c8565b9050919050565b6000819050919050565b600061893061892b6189268461890b565b6186cc565b617441565b9050919050565b61894081618915565b82525050565b600060208201905061895b6000830184618937565b92915050565b7f4d61726b65743a2053656e646572206e6f742052656d6f76616c000000000000600082015250565b6000618997601a836184a2565b91506189a282618961565b602082019050919050565b600060208201905081810360008301526189c68161898a565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000618a036010836184a2565b9150618a0e826189cd565b602082019050919050565b60006020820190508181036000830152618a32816189f6565b9050919050565b6000618a4482617441565b9150618a4f83617441565b9250828203905060ff811115618a6857618a676180e3565b5b92915050565b6000618a7982617070565b9150618a8483617070565b925082618a9457618a9361838a565b5b828206905092915050565b600060c082019050618ab46000830189617046565b618ac160208301886173d7565b618ace60408301876170d3565b618adb60608301866173d7565b618ae860808301856170d3565b618af560a08301846170d3565b979650505050505050565b6000604082019050618b1560008301856173d7565b618b2260208301846173d7565b9392505050565b618b328161703a565b8114618b3d57600080fd5b50565b600081519050618b4f81618b29565b92915050565b600060208284031215618b6b57618b6a616fab565b5b6000618b7984828501618b40565b91505092915050565b618b8b81617441565b82525050565b600060e082019050618ba6600083018a6173d7565b618bb360208301896173d7565b618bc060408301886170d3565b618bcd60608301876170d3565b618bda6080830186618b82565b618be760a08301856172a0565b618bf460c08301846172a0565b98975050505050505050565b6000618c1b618c16618c1184617441565b6186cc565b617070565b9050919050565b618c2b81618c00565b82525050565b6000602082019050618c466000830184618c22565b92915050565b6000602082019050618c61600083018461875e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600081519050618ca58161712f565b92915050565b600060208284031215618cc157618cc0616fab565b5b6000618ccf84828501618c96565b91505092915050565b6000606082019050618ced6000830186618c22565b618cfa60208301856173d7565b618d0760408301846173d7565b949350505050565b6000604082019050618d2460008301856170d3565b618d3160208301846170d3565b9392505050565b6000606082019050618d4d60008301866173d7565b618d5a60208301856173d7565b618d6760408301846170d3565b949350505050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000618dcb6026836184a2565b9150618dd682618d6f565b604082019050919050565b60006020820190508181036000830152618dfa81618dbe565b9050919050565b600081905092915050565b6000618e1782617c2b565b618e218185618e01565b9350618e31818560208601617c47565b80840191505092915050565b6000618e498284618e0c565b915081905092915050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000618eb0602b836184a2565b9150618ebb82618e54565b604082019050919050565b60006020820190508181036000830152618edf81618ea3565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000618f27601783618ee6565b9150618f3282618ef1565b601782019050919050565b600081519050919050565b6000618f5382618f3d565b618f5d8185618ee6565b9350618f6d818560208601617c47565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000618faf601183618ee6565b9150618fba82618f79565b601182019050919050565b6000618fd082618f1a565b9150618fdc8285618f48565b9150618fe782618fa2565b9150618ff38284618f48565b91508190509392505050565b600061900a82618f3d565b61901481856184a2565b9350619024818560208601617c47565b61902d816177ef565b840191505092915050565b600060208201905081810360008301526190528184618fff565b905092915050565b600061906582617070565b915060008203619078576190776180e3565b5b600182039050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006190b96014836184a2565b91506190c482619083565b602082019050919050565b600060208201905081810360008301526190e8816190ac565b9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006191256020836184a2565b9150619130826190ef565b602082019050919050565b6000602082019050818103600083015261915481619118565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220349b8a49001aab48e2791b560e81d457b94063a6057795435cfa6bffb8c6153264736f6c63430008110033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
