{
  "_format": "hh-sol-artifact-1",
  "contractName": "DelegatedAccessControlEnumerableMock",
  "sourceName": "contracts/mocks/acl/delegated/DelegatedAccessControlEnumerableMock.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "string",
          "name": "role",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "previousAdminRole",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "string",
          "name": "newAdminRole",
          "type": "string"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "string",
          "name": "role",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "string",
          "name": "role",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DELEGATED_ADMIN",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "role",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "checkRole",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "offset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        }
      ],
      "name": "getDelegateRoles",
      "outputs": [
        {
          "internalType": "string[]",
          "name": "roles",
          "type": "string[]"
        },
        {
          "internalType": "uint256",
          "name": "total",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "offset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        }
      ],
      "name": "getDelegates",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "delegates",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "total",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "role",
          "type": "string"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "role",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "role",
          "type": "string"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "role",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "role",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "role",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "role",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "roleId",
          "type": "string"
        }
      ],
      "name": "senderProtected",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "roleId",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "adminRoleId",
          "type": "string"
        }
      ],
      "name": "setRoleAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "roleId",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "setupRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611bb9806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063734917fd11610097578063b65a09ec11610066578063b65a09ec14610243578063c124404514610256578063c6ecd9b814610277578063d852bf2a1461028a57600080fd5b8063734917fd146102025780638129fc1c14610215578063967a5e2d1461021d578063aed23af81461023057600080fd5b80631e5b69a8116100d35780631e5b69a8146101b4578063316d6d21146101c957806333840f31146101dc5780633c02a8fd146101ef57600080fd5b806301ffc9a71461010557806310d288c71461012d57806316a0b99414610158578063174a9c5614610179575b600080fd5b6101186101133660046114a1565b6102ab565b60405190151581526020015b60405180910390f35b61014061013b366004611530565b6102d6565b6040516001600160a01b039091168152602001610124565b61016b61016636600461162d565b610367565b604051908152602001610124565b6101a76040518060400160405280600f81526020016e2222a622a3a0aa22a22fa0a226a4a760891b81525081565b60405161012491906116d3565b6101c76101c23660046116e6565b6103a7565b005b6101c76101d736600461174b565b6103ef565b6101c76101ea3660046117a9565b610416565b6101c76101fd36600461174b565b61048a565b6101c761021036600461174b565b61049a565b6101c7610528565b6101a761022b36600461162d565b610639565b61011861023e36600461174b565b610712565b6101c761025136600461174b565b610727565b61026961026436600461182a565b610747565b60405161012492919061186c565b6101c76102853660046118d5565b61091b565b61029d610298366004611928565b61095f565b60405161012492919061195b565b60006001600160e01b031982166307c1338f60e21b14806102d057506102d082610a6d565b92915050565b600061035e8260976000886001600160a01b03166001600160a01b03168152602001908152602001600020600061034288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610aa292505050565b8152602001908152602001600020610b2390919063ffffffff16565b95945050505050565b6001600160a01b03821660009081526097602052604081206103a0908261038d85610aa2565b8152602001908152602001600020610b2f565b9392505050565b6103e98484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610b39915050565b50505050565b826103fa8484610639565b6104048282610bd2565b61040f858585610b39565b5050505050565b61040f8585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781529250879150869081908401838280828437600092019190915250610be192505050565b610495838383610ccb565b505050565b6001600160a01b038116331461051d5760405162461bcd60e51b815260206004820152603860248201527f44656c656761746564416363657373436f6e74726f6c3a2063616e206f6e6c7960448201527f2072656e6f756e636520726f6c657320666f722073656c66000000000000000060648201526084015b60405180910390fd5b610495838383610d26565b600054610100900460ff16158080156105485750600054600160ff909116105b806105625750303b158015610562575060005460ff166001145b6105c55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610514565b6000805460ff1916600117905580156105e8576000805461ff0019166101001790555b6105f0610dbf565b8015610636576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03821660009081526065602052604081206060916066918161066186610aa2565b8152602001908152602001600020600101548152602001908152602001600020805461068c906119ac565b80601f01602080910402602001604051908101604052809291908181526020018280546106b8906119ac565b80156107055780601f106106da57610100808354040283529160200191610705565b820191906000526020600020905b8154815290600101906020018083116106e857829003601f168201915b5050505050905092915050565b600061071f848484610df8565b949350505050565b826107328484610639565b61073c8282610bd2565b61040f858585610d26565b6001600160a01b03808416600090815260996020908152604080832093881683529290529081206060919061077b81610b2f565b91508185106107b85760408051600080825260208201909252906107af565b606081526020019060019003908161079a5790505b50925050610912565b6107c285836119fc565b8411156107d6576107d385836119fc565b93505b8367ffffffffffffffff8111156107ef576107ef61158a565b60405190808252806020026020018201604052801561082257816020015b606081526020019060019003908161080d5790505b50925060005b8481101561090f5760666000610848610841848a611a13565b8590610e4d565b81526020019081526020016000208054610861906119ac565b80601f016020809104026020016040519081016040528092919081815260200182805461088d906119ac565b80156108da5780601f106108af576101008083540402835291602001916108da565b820191906000526020600020905b8154815290600101906020018083116108bd57829003601f168201915b50505050508482815181106108f1576108f1611a2b565b6020026020010181905250808061090790611a41565b915050610828565b50505b94509492505050565b8282828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061040f9250849150839050610bd2565b6001600160a01b03831660009081526098602052604081206060919061098481610b2f565b91508185106109a457506040805160008152602081019091529150610a65565b6109ae85836119fc565b8411156109c2576109bf85836119fc565b93505b8367ffffffffffffffff8111156109db576109db61158a565b604051908082528060200260200182016040528015610a04578160200160208202803683370190505b50925060005b84811015610a6257610a26610a1f8288611a13565b8390610b23565b848281518110610a3857610a38611a2b565b6001600160a01b039092166020928302919091019091015280610a5a81611a41565b915050610a0a565b50505b935093915050565b60006001600160e01b03198216631e1a97e360e31b14806102d057506301ffc9a760e01b6001600160e01b03198316146102d0565b60008082604051602001610ab69190611a5a565b60408051601f1981840301815282825280516020918201208383018352600f84526e2222a622a3a0aa22a22fa0a226a4a760891b848301529151919350610afe929101611a5a565b6040516020818303038152906040528051906020012081036102d05750600092915050565b60006103a08383610e55565b60006102d0825490565b610b44838383610e7f565b6000610b4f83610aa2565b6001600160a01b03851660009081526097602090815260408083208484529091529020909150610b7f9083610f68565b506001600160a01b0382166000908152609860205260409020610ba29085610f68565b506001600160a01b03808316600090815260996020908152604080832093881683529290522061040f9082610f7d565b610bdd828233610ccb565b5050565b6000610bed8484610639565b90506000610bfa83610aa2565b60008181526066602090815260409091208551929350610c1e929091860190611408565b506001600160a01b03851660009081526065602052604081208291610c4287610aa2565b81526020019081526020016000206001018190555082604051610c659190611a5a565b604051809103902084604051610c7b9190611a5a565b6040518091039020866001600160a01b03167ffb5450778fb973c2acf9b87ec0f677a9389bb86ee0cec4af20afbf7109fa444085604051610cbc91906116d3565b60405180910390a45050505050565b610cd6838383610df8565b61049557610cee816001600160a01b03166014610f89565b82604051602001610d00929190611a76565b60408051601f198184030181529082905262461bcd60e51b8252610514916004016116d3565b610d31838383611125565b6000610d3c83610aa2565b6001600160a01b03851660009081526097602090815260408083208484529091529020909150610d6c90836111f9565b506001600160a01b0382166000908152609860205260409020610d8f90856111f9565b506001600160a01b03808316600090815260996020908152604080832093881683529290522061040f908261120e565b600054610100900460ff16610de65760405162461bcd60e51b815260040161051490611aec565b610dee61121a565b610df661129f565b565b6001600160a01b038316600090815260656020526040812081610e1a85610aa2565b8152602080820192909252604090810160009081206001600160a01b038616825290925290205460ff1690509392505050565b60006103a083835b6000826000018281548110610e6c57610e6c611a2b565b9060005260206000200154905092915050565b610e8a838383610df8565b15610e9457505050565b6000610e9f83610aa2565b60008181526066602090815260409091208551929350610ec3929091860190611408565b506001600160a01b03808516600090815260656020908152604080832085845282528083209386168084529390915290819020805460ff1916600117905551610f0d908590611a5a565b6040518091039020856001600160a01b03167f4877e1da891dea6a4e4868caa5f230cc980340a328f9348da2498162a4575548610f473390565b6040516001600160a01b03909116815260200160405180910390a450505050565b60006103a0836001600160a01b0384166112c6565b60006103a083836112c6565b60606000610f98836002611b37565b610fa3906002611a13565b67ffffffffffffffff811115610fbb57610fbb61158a565b6040519080825280601f01601f191660200182016040528015610fe5576020820181803683370190505b509050600360fc1b8160008151811061100057611000611a2b565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061102f5761102f611a2b565b60200101906001600160f81b031916908160001a9053506000611053846002611b37565b61105e906001611a13565b90505b60018111156110d6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061109257611092611a2b565b1a60f81b8282815181106110a8576110a8611a2b565b60200101906001600160f81b031916908160001a90535060049490941c936110cf81611b56565b9050611061565b5083156103a05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610514565b611130838383610df8565b61113957505050565b6001600160a01b03831660009081526065602052604081208161115b85610aa2565b8152602080820192909252604090810160009081206001600160a01b0386168083529352819020805460ff191693151593909317909255905161119f908490611a5a565b6040518091039020846001600160a01b03167f9fa32d475b9db2cc9ec696956bf33b962d98bb530b42b0501a32a94c3bc8ba246111d93390565b6040516001600160a01b03909116815260200160405180910390a4505050565b60006103a0836001600160a01b038416611315565b60006103a08383611315565b600054610100900460ff166112415760405162461bcd60e51b815260040161051490611aec565b60408051808201909152600f81526e2222a622a3a0aa22a22fa0a226a4a760891b602080830191825260008052606690529051610636917f6f48904484b35701cf1f41ad9068b394adf7e2f8a59d2309a04d10a155eaa72b91611408565b600054610100900460ff16610df65760405162461bcd60e51b815260040161051490611aec565b600081815260018301602052604081205461130d575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556102d0565b5060006102d0565b600081815260018301602052604081205480156113fe5760006113396001836119fc565b855490915060009061134d906001906119fc565b90508181146113b257600086600001828154811061136d5761136d611a2b565b906000526020600020015490508087600001848154811061139057611390611a2b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806113c3576113c3611b6d565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506102d0565b60009150506102d0565b828054611414906119ac565b90600052602060002090601f016020900481019282611436576000855561147c565b82601f1061144f57805160ff191683800117855561147c565b8280016001018555821561147c579182015b8281111561147c578251825591602001919060010190611461565b5061148892915061148c565b5090565b5b80821115611488576000815560010161148d565b6000602082840312156114b357600080fd5b81356001600160e01b0319811681146103a057600080fd5b80356001600160a01b03811681146114e257600080fd5b919050565b60008083601f8401126114f957600080fd5b50813567ffffffffffffffff81111561151157600080fd5b60208301915083602082850101111561152957600080fd5b9250929050565b6000806000806060858703121561154657600080fd5b61154f856114cb565b9350602085013567ffffffffffffffff81111561156b57600080fd5b611577878288016114e7565b9598909750949560400135949350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126115b157600080fd5b813567ffffffffffffffff808211156115cc576115cc61158a565b604051601f8301601f19908116603f011681019082821181831017156115f4576115f461158a565b8160405283815286602085880101111561160d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561164057600080fd5b611649836114cb565b9150602083013567ffffffffffffffff81111561166557600080fd5b611671858286016115a0565b9150509250929050565b60005b8381101561169657818101518382015260200161167e565b838111156103e95750506000910152565b600081518084526116bf81602086016020860161167b565b601f01601f19169290920160200192915050565b6020815260006103a060208301846116a7565b600080600080606085870312156116fc57600080fd5b611705856114cb565b9350602085013567ffffffffffffffff81111561172157600080fd5b61172d878288016114e7565b90945092506117409050604086016114cb565b905092959194509250565b60008060006060848603121561176057600080fd5b611769846114cb565b9250602084013567ffffffffffffffff81111561178557600080fd5b611791868287016115a0565b9250506117a0604085016114cb565b90509250925092565b6000806000806000606086880312156117c157600080fd5b6117ca866114cb565b9450602086013567ffffffffffffffff808211156117e757600080fd5b6117f389838a016114e7565b9096509450604088013591508082111561180c57600080fd5b50611819888289016114e7565b969995985093965092949392505050565b6000806000806080858703121561184057600080fd5b611849856114cb565b9350611857602086016114cb565b93969395505050506040820135916060013590565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b838110156118c357605f198887030185526118b18683516116a7565b95509382019390820190600101611895565b50509490940194909452949350505050565b6000806000604084860312156118ea57600080fd5b6118f3846114cb565b9250602084013567ffffffffffffffff81111561190f57600080fd5b61191b868287016114e7565b9497909650939450505050565b60008060006060848603121561193d57600080fd5b611946846114cb565b95602085013595506040909401359392505050565b604080825283519082018190526000906020906060840190828701845b8281101561199d5781516001600160a01b031684529284019290840190600101611978565b50505092019290925292915050565b600181811c908216806119c057607f821691505b6020821081036119e057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611a0e57611a0e6119e6565b500390565b60008219821115611a2657611a266119e6565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201611a5357611a536119e6565b5060010190565b60008251611a6c81846020870161167b565b9190910192915050565b7f44656c656761746564416363657373436f6e74726f6c3a206163636f756e7420815260008351611aae81602085016020880161167b565b80830190507001034b99036b4b9b9b4b733903937b6329607d1b60208201528351611ae081603184016020880161167b565b01603101949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000816000190483118215151615611b5157611b516119e6565b500290565b600081611b6557611b656119e6565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203737db2abfb09f8373dcbcf18c69659c70059b29c2f75b4880746563091ce03464736f6c634300080d0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063734917fd11610097578063b65a09ec11610066578063b65a09ec14610243578063c124404514610256578063c6ecd9b814610277578063d852bf2a1461028a57600080fd5b8063734917fd146102025780638129fc1c14610215578063967a5e2d1461021d578063aed23af81461023057600080fd5b80631e5b69a8116100d35780631e5b69a8146101b4578063316d6d21146101c957806333840f31146101dc5780633c02a8fd146101ef57600080fd5b806301ffc9a71461010557806310d288c71461012d57806316a0b99414610158578063174a9c5614610179575b600080fd5b6101186101133660046114a1565b6102ab565b60405190151581526020015b60405180910390f35b61014061013b366004611530565b6102d6565b6040516001600160a01b039091168152602001610124565b61016b61016636600461162d565b610367565b604051908152602001610124565b6101a76040518060400160405280600f81526020016e2222a622a3a0aa22a22fa0a226a4a760891b81525081565b60405161012491906116d3565b6101c76101c23660046116e6565b6103a7565b005b6101c76101d736600461174b565b6103ef565b6101c76101ea3660046117a9565b610416565b6101c76101fd36600461174b565b61048a565b6101c761021036600461174b565b61049a565b6101c7610528565b6101a761022b36600461162d565b610639565b61011861023e36600461174b565b610712565b6101c761025136600461174b565b610727565b61026961026436600461182a565b610747565b60405161012492919061186c565b6101c76102853660046118d5565b61091b565b61029d610298366004611928565b61095f565b60405161012492919061195b565b60006001600160e01b031982166307c1338f60e21b14806102d057506102d082610a6d565b92915050565b600061035e8260976000886001600160a01b03166001600160a01b03168152602001908152602001600020600061034288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610aa292505050565b8152602001908152602001600020610b2390919063ffffffff16565b95945050505050565b6001600160a01b03821660009081526097602052604081206103a0908261038d85610aa2565b8152602001908152602001600020610b2f565b9392505050565b6103e98484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610b39915050565b50505050565b826103fa8484610639565b6104048282610bd2565b61040f858585610b39565b5050505050565b61040f8585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781529250879150869081908401838280828437600092019190915250610be192505050565b610495838383610ccb565b505050565b6001600160a01b038116331461051d5760405162461bcd60e51b815260206004820152603860248201527f44656c656761746564416363657373436f6e74726f6c3a2063616e206f6e6c7960448201527f2072656e6f756e636520726f6c657320666f722073656c66000000000000000060648201526084015b60405180910390fd5b610495838383610d26565b600054610100900460ff16158080156105485750600054600160ff909116105b806105625750303b158015610562575060005460ff166001145b6105c55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610514565b6000805460ff1916600117905580156105e8576000805461ff0019166101001790555b6105f0610dbf565b8015610636576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03821660009081526065602052604081206060916066918161066186610aa2565b8152602001908152602001600020600101548152602001908152602001600020805461068c906119ac565b80601f01602080910402602001604051908101604052809291908181526020018280546106b8906119ac565b80156107055780601f106106da57610100808354040283529160200191610705565b820191906000526020600020905b8154815290600101906020018083116106e857829003601f168201915b5050505050905092915050565b600061071f848484610df8565b949350505050565b826107328484610639565b61073c8282610bd2565b61040f858585610d26565b6001600160a01b03808416600090815260996020908152604080832093881683529290529081206060919061077b81610b2f565b91508185106107b85760408051600080825260208201909252906107af565b606081526020019060019003908161079a5790505b50925050610912565b6107c285836119fc565b8411156107d6576107d385836119fc565b93505b8367ffffffffffffffff8111156107ef576107ef61158a565b60405190808252806020026020018201604052801561082257816020015b606081526020019060019003908161080d5790505b50925060005b8481101561090f5760666000610848610841848a611a13565b8590610e4d565b81526020019081526020016000208054610861906119ac565b80601f016020809104026020016040519081016040528092919081815260200182805461088d906119ac565b80156108da5780601f106108af576101008083540402835291602001916108da565b820191906000526020600020905b8154815290600101906020018083116108bd57829003601f168201915b50505050508482815181106108f1576108f1611a2b565b6020026020010181905250808061090790611a41565b915050610828565b50505b94509492505050565b8282828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061040f9250849150839050610bd2565b6001600160a01b03831660009081526098602052604081206060919061098481610b2f565b91508185106109a457506040805160008152602081019091529150610a65565b6109ae85836119fc565b8411156109c2576109bf85836119fc565b93505b8367ffffffffffffffff8111156109db576109db61158a565b604051908082528060200260200182016040528015610a04578160200160208202803683370190505b50925060005b84811015610a6257610a26610a1f8288611a13565b8390610b23565b848281518110610a3857610a38611a2b565b6001600160a01b039092166020928302919091019091015280610a5a81611a41565b915050610a0a565b50505b935093915050565b60006001600160e01b03198216631e1a97e360e31b14806102d057506301ffc9a760e01b6001600160e01b03198316146102d0565b60008082604051602001610ab69190611a5a565b60408051601f1981840301815282825280516020918201208383018352600f84526e2222a622a3a0aa22a22fa0a226a4a760891b848301529151919350610afe929101611a5a565b6040516020818303038152906040528051906020012081036102d05750600092915050565b60006103a08383610e55565b60006102d0825490565b610b44838383610e7f565b6000610b4f83610aa2565b6001600160a01b03851660009081526097602090815260408083208484529091529020909150610b7f9083610f68565b506001600160a01b0382166000908152609860205260409020610ba29085610f68565b506001600160a01b03808316600090815260996020908152604080832093881683529290522061040f9082610f7d565b610bdd828233610ccb565b5050565b6000610bed8484610639565b90506000610bfa83610aa2565b60008181526066602090815260409091208551929350610c1e929091860190611408565b506001600160a01b03851660009081526065602052604081208291610c4287610aa2565b81526020019081526020016000206001018190555082604051610c659190611a5a565b604051809103902084604051610c7b9190611a5a565b6040518091039020866001600160a01b03167ffb5450778fb973c2acf9b87ec0f677a9389bb86ee0cec4af20afbf7109fa444085604051610cbc91906116d3565b60405180910390a45050505050565b610cd6838383610df8565b61049557610cee816001600160a01b03166014610f89565b82604051602001610d00929190611a76565b60408051601f198184030181529082905262461bcd60e51b8252610514916004016116d3565b610d31838383611125565b6000610d3c83610aa2565b6001600160a01b03851660009081526097602090815260408083208484529091529020909150610d6c90836111f9565b506001600160a01b0382166000908152609860205260409020610d8f90856111f9565b506001600160a01b03808316600090815260996020908152604080832093881683529290522061040f908261120e565b600054610100900460ff16610de65760405162461bcd60e51b815260040161051490611aec565b610dee61121a565b610df661129f565b565b6001600160a01b038316600090815260656020526040812081610e1a85610aa2565b8152602080820192909252604090810160009081206001600160a01b038616825290925290205460ff1690509392505050565b60006103a083835b6000826000018281548110610e6c57610e6c611a2b565b9060005260206000200154905092915050565b610e8a838383610df8565b15610e9457505050565b6000610e9f83610aa2565b60008181526066602090815260409091208551929350610ec3929091860190611408565b506001600160a01b03808516600090815260656020908152604080832085845282528083209386168084529390915290819020805460ff1916600117905551610f0d908590611a5a565b6040518091039020856001600160a01b03167f4877e1da891dea6a4e4868caa5f230cc980340a328f9348da2498162a4575548610f473390565b6040516001600160a01b03909116815260200160405180910390a450505050565b60006103a0836001600160a01b0384166112c6565b60006103a083836112c6565b60606000610f98836002611b37565b610fa3906002611a13565b67ffffffffffffffff811115610fbb57610fbb61158a565b6040519080825280601f01601f191660200182016040528015610fe5576020820181803683370190505b509050600360fc1b8160008151811061100057611000611a2b565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061102f5761102f611a2b565b60200101906001600160f81b031916908160001a9053506000611053846002611b37565b61105e906001611a13565b90505b60018111156110d6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061109257611092611a2b565b1a60f81b8282815181106110a8576110a8611a2b565b60200101906001600160f81b031916908160001a90535060049490941c936110cf81611b56565b9050611061565b5083156103a05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610514565b611130838383610df8565b61113957505050565b6001600160a01b03831660009081526065602052604081208161115b85610aa2565b8152602080820192909252604090810160009081206001600160a01b0386168083529352819020805460ff191693151593909317909255905161119f908490611a5a565b6040518091039020846001600160a01b03167f9fa32d475b9db2cc9ec696956bf33b962d98bb530b42b0501a32a94c3bc8ba246111d93390565b6040516001600160a01b03909116815260200160405180910390a4505050565b60006103a0836001600160a01b038416611315565b60006103a08383611315565b600054610100900460ff166112415760405162461bcd60e51b815260040161051490611aec565b60408051808201909152600f81526e2222a622a3a0aa22a22fa0a226a4a760891b602080830191825260008052606690529051610636917f6f48904484b35701cf1f41ad9068b394adf7e2f8a59d2309a04d10a155eaa72b91611408565b600054610100900460ff16610df65760405162461bcd60e51b815260040161051490611aec565b600081815260018301602052604081205461130d575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556102d0565b5060006102d0565b600081815260018301602052604081205480156113fe5760006113396001836119fc565b855490915060009061134d906001906119fc565b90508181146113b257600086600001828154811061136d5761136d611a2b565b906000526020600020015490508087600001848154811061139057611390611a2b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806113c3576113c3611b6d565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506102d0565b60009150506102d0565b828054611414906119ac565b90600052602060002090601f016020900481019282611436576000855561147c565b82601f1061144f57805160ff191683800117855561147c565b8280016001018555821561147c579182015b8281111561147c578251825591602001919060010190611461565b5061148892915061148c565b5090565b5b80821115611488576000815560010161148d565b6000602082840312156114b357600080fd5b81356001600160e01b0319811681146103a057600080fd5b80356001600160a01b03811681146114e257600080fd5b919050565b60008083601f8401126114f957600080fd5b50813567ffffffffffffffff81111561151157600080fd5b60208301915083602082850101111561152957600080fd5b9250929050565b6000806000806060858703121561154657600080fd5b61154f856114cb565b9350602085013567ffffffffffffffff81111561156b57600080fd5b611577878288016114e7565b9598909750949560400135949350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126115b157600080fd5b813567ffffffffffffffff808211156115cc576115cc61158a565b604051601f8301601f19908116603f011681019082821181831017156115f4576115f461158a565b8160405283815286602085880101111561160d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561164057600080fd5b611649836114cb565b9150602083013567ffffffffffffffff81111561166557600080fd5b611671858286016115a0565b9150509250929050565b60005b8381101561169657818101518382015260200161167e565b838111156103e95750506000910152565b600081518084526116bf81602086016020860161167b565b601f01601f19169290920160200192915050565b6020815260006103a060208301846116a7565b600080600080606085870312156116fc57600080fd5b611705856114cb565b9350602085013567ffffffffffffffff81111561172157600080fd5b61172d878288016114e7565b90945092506117409050604086016114cb565b905092959194509250565b60008060006060848603121561176057600080fd5b611769846114cb565b9250602084013567ffffffffffffffff81111561178557600080fd5b611791868287016115a0565b9250506117a0604085016114cb565b90509250925092565b6000806000806000606086880312156117c157600080fd5b6117ca866114cb565b9450602086013567ffffffffffffffff808211156117e757600080fd5b6117f389838a016114e7565b9096509450604088013591508082111561180c57600080fd5b50611819888289016114e7565b969995985093965092949392505050565b6000806000806080858703121561184057600080fd5b611849856114cb565b9350611857602086016114cb565b93969395505050506040820135916060013590565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b838110156118c357605f198887030185526118b18683516116a7565b95509382019390820190600101611895565b50509490940194909452949350505050565b6000806000604084860312156118ea57600080fd5b6118f3846114cb565b9250602084013567ffffffffffffffff81111561190f57600080fd5b61191b868287016114e7565b9497909650939450505050565b60008060006060848603121561193d57600080fd5b611946846114cb565b95602085013595506040909401359392505050565b604080825283519082018190526000906020906060840190828701845b8281101561199d5781516001600160a01b031684529284019290840190600101611978565b50505092019290925292915050565b600181811c908216806119c057607f821691505b6020821081036119e057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611a0e57611a0e6119e6565b500390565b60008219821115611a2657611a266119e6565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201611a5357611a536119e6565b5060010190565b60008251611a6c81846020870161167b565b9190910192915050565b7f44656c656761746564416363657373436f6e74726f6c3a206163636f756e7420815260008351611aae81602085016020880161167b565b80830190507001034b99036b4b9b9b4b733903937b6329607d1b60208201528351611ae081603184016020880161167b565b01603101949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000816000190483118215151615611b5157611b516119e6565b500290565b600081611b6557611b656119e6565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203737db2abfb09f8373dcbcf18c69659c70059b29c2f75b4880746563091ce03464736f6c634300080d0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
