Redacting sensitive data from images

The Cloud Data Loss Prevention API can redact sensitive text from an image. Sensitive data such as personally identifiable information (PII) is detected by the API, which then obscures it using an opaque rectangle.

For example, consider the following image:

Image before redaction

After submitting the image to Cloud DLP using default settings, the image appears as follows:

Image after redaction

The JSON request used for this example follows. You can try this request in APIs Explorer. (To avoid having to authorize, click Execute without OAuth.)

JSON input

POST https://dlp.googleapis.com/v2/projects/testff/image:redact?key={YOUR_API_KEY}

{
  "byteItem":{
    "data":"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",
    "type":"IMAGE_PNG"
  }
}

After sending the JSON input in a POST request to the specified endpoint, the API sends the following response.

JSON output:

{
  "redactedImage":"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"
}

The DLP API's image.redact method takes the following as arguments:

  • A base64-encoded image. Cloud DLP currently supports the following image types: IMAGE_JPEG, IMAGE_BMP and IMAGE_PNG.
  • Include an inspectConfig argument to specify detection configuration information (InspectConfig) such as what infoTypes to look for. If you leave this out, Cloud DLP scans for a default set of common infoTypes.
  • You can also include an imageRedactionConfigs[] argument, which specifies redaction configuration information (ImageRedactionConfig) such as what color to use to obscure redacted text or whether to redact only text of certain infoTypes or all text.

The API returns the same image(s) you gave it, but any text identified as containing sensitive information according to your criteria has been redacted.

REST example

The following JSON includes a base64-encoded image and sets several parameters for using the image redaction functionality of Cloud DLP. The image before redaction is shown here:

Image before redaction

The image after redaction is shown here:

The JSON request used for this example follows. You can try this request in APIs Explorer. (To avoid having to authorize, click Execute without OAuth.)

See the JSON quickstart for more information about using Cloud DLP with JSON.

JSON input:

POST https://dlp.googleapis.com/v2/projects/testff/image:redact?key={YOUR_API_KEY}

{
  "byteItem":{
    "data":"iVBORw0KGgoAAAANSUhEUgAAAmQAAAArCAIAAABZ4gN7AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAACcmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzI8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkZseWluZyBNZWF0IEFjb3JuIDYuMy4zPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE5LTA3LTExVDE3OjE4OjQ4PC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CgdDfgkAADvdSURBVHgB7dwJ3K/5XP/xMC2IypIZYcg/uyzZBjGNpbRZQowsWSJEyDrDKEvK0mIpGlkH2bOLg7axV5Q9g6iQfZdl/s/7fo1PP/dyzpxz7jMzD67r8Zhrvtf3+qzvz+f7+S7X7z6nO/HEE79nuRYEFgQWBBYEFgQWBLZH4PTbv1reLAgsCCwILAgsCCwIrCGwTJZLHiwILAgsCCwILAjsAYFlstwDQMvrBYEFgQWBBYEFgWWyXHJgQWBBYEFgQWBBYA8ILJPlHgBaXi8ILAgsCCwILAgsk+WSAwsCCwILAgsCCwJ7QGCZLPcA0PJ6QWBBYEFgQWBBYHeT5de+9jUAfelLX3L/+te/vhmsL37xi9u92ky8oefLX/7yN7/5zW984xv6Nb7yla9ofPWrX43ss5/97DxmQP37fx9HNNLeff8l71GCP2kNsaHc4x+5rhJAbBj3v5HXhZi0kD/FoNjS/owZk2rsrZ2D2P/+7/+OqFE30S/fEr7qNRbZOPQ70vjCF76QnCSXz5Rm6mjvbfcNebIjZuyskME5sQxedWeQPy3kFQsn7tPYDo1G2Sc/+UkEvChYU5fiIgSZBOuxXIre/TOf+Uz9n/vc52qUVEM2DaEv+gMmGLOwfvfVRE1atTGyGMuW0izGKLuPy5OHq8ZHI+uGLAm5rLP+nOUIjauY9HZV3YY2+lzISI9TxwZALL3Vk0d66GJJwyGWebVBBVMTlZDU1ZMXAzjGDI4yT8eeDWI3P55uOwuGlNHf+73fi+x0p1sj9njQQQd5S99ZznIWus9whjN4NfR72wgRKmIk9kxnOtMIBNbpT396NLTsreQt6YvBD/zAD/QWmoTTuCXxDnYGIIEMEMjv+77v47K02051r8ALbSzch0OPO2WVLIEDw7JNSm1nzE5p3L0csSgNeBolC894xjPulZ2lyiQMmd///d/fmNGQTl7R4s7rMpnjGrV3FmFerKN7Io9WVZfMwZ6npUTZrkfDEGAkRmQeZ4BEf6rfy8/VZGZSHu1VvE4ZRwKfrsbR7pUidsmHskhFOvOZz4zlv//7vw855BCNgqUBBHERKcT5HsvIN1/indol0/Ce9axnlWZQUj8BKMQI9OucAegtsZUpk1wGVBWpQKmAuFNUMhMiyfVgYQz7PWrHkqmEM0BnRn76058mlpxPfepTZzvb2dB8/vOfN9waCB7ZRvjmzKTLW7qiDIQ95icvfvAHfxCji3cGIzk6aWQPM1Ln7WDIC202BxQVnHLXg5cj1jQYvV2XurbiJ1abzcj4vipTP5xHePb/13/917nPfe58TMhu7ttOlhSzgxTqR8EIqge4GcqrEByCPTZIZrpLI8ewTPkgX9tb3jJj8nWPYk+zBDwqcpzKyMm2LW0O4QCZkA8+W7LsVefIXOXasnOV4JRpyz3pJCuo29KkLTvHNsBid03PbhqrUdAWnakvu+E6+a8mZBq4RjgfjRqVovrVveqQ46NiJEzPaaSxCt2kNxc22M/a3cfrQLsDW2W9ys5mlzq7nVL7QlMIF1Zr2rTxypDCpC41SIkyYQhlwV2dFYqdEqezCck8gXKzdpKzkLW4olH3WEKRSdcUS53LY+zE1kZPbBPtyBkVWbvqEWJejJwN0WGqV64coZF8ushH2QDRQ2ydo2i7BmLZjpENvDMwCUdczq9ykekRAUUg5XKQjsG8WxvYK0M7f2eCwCW4qwTzimQGE8iMlIbqqgG7b29bUPhDLn/wZzGzuA07LmnrL6Ic07l7NZvfJl//mM4rmEZZSOhF1upss4R97ikSsQNXY/Tus8w9MvJIFN2hlwFhuB1jmDtyEWBcyAzjOrdj2av+YGcMBIoy9obrXsnZKeJSi7NySa4zr6OwfbATXBBmGPRyzd140yOXytUBn8tU0+utNoTL853yi0DGwFnDlSIaGVnJ0GBSyHMcDQMiywU9ubNTJu2UHHZKnrzjRem9D/HaKXu2lANJhoFXCFwaHgfezSw//MM/bJIQIMTeVhn4GAv297znPbYjYsd9XutHbCIRJtmFBQJeafznf/5n4xexmRKlS80sFREUVneMtq3A7Ah3ZlPTNrEoTRt2JtKDBI9KpTu9hUD+NJPp1MNyr7Rd6MlnEkd0ku+RfI5oNBa8XYPmW18f7P8YzEgNivjoaiZmgAtlDZ3Vz3RteaeUKJjTwhiNoDMk4bMKhbecJZkc93y3/WXkf/zHf2BnMLM9UkpsxuvRRkxgsOPVQ5rr4x//eK+yzStyIOkRMVTR7NGF//OL3C0vup///Of/2I/9GER+5Ed+xF7V5RTi4IMPPu95z3vBC17wQhe60JaMJ7+T83BHz+0tuQT4Yx/72P9bv7Yk2J9OGP3O7/wOp/7wD/9wf+ScTF6xQcnThqI236e9WQjfA6dXb37zmw899NCf+qmf2ky5bz3ZAwQBFeUeRWTfpO0Il8QdOeL+4z/+4+c85zn31k7DW93hkSz9u7/7OwKToBHaCH7oh37ofOc7X68Mp7vd7W73vve9e3sgEODXpHo+vutd7zKULnzhCz/72c/WU6A1DLpqAcddoWFs1zhN3cE1+andEAZ1aJ+m8optwQ5AjUzdPZi/93u/p8S97GUvG7J///d/v+ENb6huqocKtInkvve9r7kHQQIdZmqDwgR561vfWiF2JqdSX+xiF3vCE56QnNVY1/O85z3vOte5jgJbRZYSf/InfyJFvSXH/Zd/+ZcvfvGLYyw/m/PinTvMsfzET/yEWVDa/+iP/iiB7i5zv/7rXve6EZfeRsc5znEOGeg6+9nPjgz9BS5wAdbe5CY3oSKPyARCQs5//vMjRmbsICPh53/+55Mp1ruHNJvHhac97Wk//dM/zVQTpyS/3vWu9853vlMuISAw30ut3/3d373UpS41c9VlLnOZZz7zmSlNo7mWdvOD6ZynKsZ5znMeruWdNneid0fpDisDKvbHPvax6j8b0A/ZbhonfVPZTCEPnvOc53TKDNAsNi1PgympxzvDZrOc7XpAg111QDBYW0G8//3v/5//+Z/p0aCR3u3k7G0/gfBisEuVlNBCciBK5GbD5MEJJ5xQNvC9xmay6QERw0q1f/mXf4GDYTNv978h1QxIqzlrPboqc/svdp8lcNYVLEoDfxlG2t7aeb/73a/1+K/92q9hL8e6E/uJT3yCWIntlRx4xzveQZHSZrtAO137bP+WjIPqargf8pCHtIK+wx3usMpV2iu7mcSeKsiOW7WqdJ/bPKoCaExik7a38dpnA04mY6ia7VxYetwN7z/8wz8oOKbGaOTMq1/96uJlwXrEEUdc7nKXU+jFSJlWrPg72fXBD37Q6tMrM8pP/uRPXvSiF0UpGwW6yU/KEVtYH/e4x/WNzcxhUlRmTcN4r3/960fM1H/+53/G/hu/8Ru4hldDbiSHdo+qBEZyZDKN7GdA20Fir3a1q5WHImUXm9JmfX71Kc0saFzc+MY3zpe2dCYhBAaLBvloTC16bJTN8dnDyEnyENt8T6ZsefCDH0yO61znOtc1r3lNrrHZJPeWt7xluAj86Ec/etnLXjaQFb3DDz/cfMYjjMq1iIQPFqvqdXnfg0CDL7g4wkgOWiWAOu0V0rSw/K1vfWurGVyzMB0btmxsO1kSd+yxxxL0Mz/zM/Ad5lVcGszue8y/YZ/GqhxucMmE/7CHPQx297nPfaosaOwS2CBIw7hTDRp/8zd/k7o//uM/LvN2SvKWcvhyz3veU3jucY97FLa9Au3tb387HAzOLYXvQ2cJZEkkt2RYo7fatw/SdpZF7pnS+Cvd99ZOqBqHlsPqhTHgLHd1Z0Zy0zCX2exRXO585zvf9a537TFHVpNzP10bUbAt4ky65CUvqfpIBiNceV1VwST1l+9N56uvTmvt3JHMUpov0puzexuvU8YpxRfgLo3da+TCNa5xDenxoQ99CKVYqMvCpKz/9m//NpcRuFtjOeZRkX/xF39xVaC9Fy03uMEN2nR69fKXv9y+QkAf9KAHeSzlNJ785CfrdD3lKU/xaABaJO3atcvMofOBD3ygzsZjO9q3ve1taCadwhlNl80Zrqtc5Sr6s7B+EhLi0Zhy/8d//EdDXlVnCUdcOmuQH3HC3/e+95F57Wtfu01zAglfnXVWB1cEG+4JrLz8+Z//OYEG9ate9aqZNX7lV35Fp/xJS+tCc7ZO5e5Nb3qTaZupxAJKp+uFL3yhx1YJGWl76jFfxjymjvbVCo/AGLSAIErSulthbDB7y8dtJ0vUT33qU6VIqxLeMiWfuyPIuC3l7rEzlxI14bTVY7ozsWH/8Ic/3O52evazUSaF/m/91m9RZ5m/nzJPDjuNzm2MLvse9HuEruXCQG1nKZ8sbE+OrpNJIwR9ZWEVe8LkZPLuOJlsZkBjT0M2m+1cFO2VnW984xvF9KpXveptb3tbfj396U8nYVJX25hEYJVaRQjh2rOcH9h3xM1Vaabqf/u3f2OAiuwrgMaznvWsRnI20Oh8heV8Xx3hO2LJjgspjaU0g6V3KbRX8dpxkzYLDFhQu7wdnDdT6vnbv/1bZGaIIfvTP/1TPb/wC7/gLQdn5Frl6Bcm1dwrUX784x+vxyQqe/WQECAveclLLPfNo4Zb7O5XuMIVED/3uc+VdSU/Fm2nlPqdedoz6TEHvOY1rzHB2NF67KpgDto6X/nKV9qV3vSmN52cUei+Rb72/+qtxt/8zd+o6r/0S780b0t7j+OaNuG7du3iXY5jb3JKTtUpMwaoEbih0TSGzJc7rvXpIZqk2ThaYTzqUY9qpHSKZoT+0z/9U0hmmPZf/dVfkeCw2jgiAbt5V499uUcuMzuZY0OUxSg5IHrAAx7AtStf+cpsw07X0O+mse0PfGh1WYNwkidEGw/kurRrAF2DHe7s4OprX/va17/+9T1GwwENZ1y2vUqhtu+6r3vd6xBrk+xOMiF24vzUtvqzXkCPFwHJttXhyBNkllFEJQG7Ky21sR9//PGA9ohmlSwcCWR5IeQLXmIRy36lVqniuMc6pyE/oOyU2JmMAETjbaolnDYCjvzrv/4rAxpLOl3ynjuCTa+98rvf/W6PvUoLI/HqIbYeqW/cYkk+AsbDgfEx1i86pMmYlo1eBbLG2I/XMtmIdW92xEsdaeUK4oIbVlQQ67vaX//1X3Mnw5KW0lXh2kFh5GgjGBqYONGyIvaqzkR1R6wf2i9+8YvNH+DVY2HUOGQPMiDQK0Z5bbmgv6xLIDtxuUZmy0/HVje/+c0Z9pd/+ZfewoQQ3pFDArHoSaMLjVjMYSyx5OtEyfK///u/l4o5SE5mBMWGfBgD5AbKYdEOZLwMMCx9wdLpqM2mRMP5DZM4wh7aRdkZVwakiGTJzBiNenBlCTKXR2H9wAc+oKq2I+9tGg09Q8ZGB5k8tNHRsGLQ+d73vlfbJRBSyOlFCcCYURSBUBrahq1PvIyctyjtVEo5BvjxC7i407hmW/FC8IY3vGHkhxVeTgl9j6zNl6SRYxwVZTaUHsDRruBkmDvXSOCCt7QYNVbYHMlI/QpOh5mIfcYmOTS80pNSvNFbu0gA0REObxmg2uixvdPWCCKv7BeduFJNHSES7Pd///edVN3pTncyNeqXZuhRmgycxzLbJzeAeCXl/AoBu32VbQ1KYgGi7duBtwaFcxG8KrDZlzFwznGUtLA24RrAUVWY50BFZ6DlHQmuAuEOZGgw1emLfrwuSoMXb2h4pa2w0O5rZY5rayga7iZvjMxgTHm7pmarCwFGXr/0pS+Vb0C70Y1uxIBoSTNeHCUyzKIkyxUNMi9/+cv7SNlYwI4elx2nr4zSrJM2/R3D+IaKQNZxhMzVPPHolS+agcAele2hD32oHt8ZQUpX9DxigOi4Dw7ZedJ9Da1trr/4i78QRZFuckbFJSNfI9zJNUo9GsyOmGGHXqIQbY0j6UtBYXM8zTFTCGkpZmUC3V12APNlVJy4bRlCL9/QgxuNDNZ2QuJOiyqT/O4I5BN8JxLIpK/+zl4ylQt6wOFu84HGikZ45IQMoJoZVi5KzBykMMPld0CpRoPrsMMOUz4IcbUGVCxsVUEfmbKIxpQJK1GBDK65rCvF1RWekEyUAcNC36VpKUUcyxx99NGEk8AwZDABKbHOEGghU+DlBHXqSwTeJtnRhx+zoKl+ob///e+PBoG7oplhPepRDY327BRQDbFTL7KQajSueWRJYFIn4r012n2ZF4jMI+Qud7kLF3pbCHywcbolssVd4ZDBAIlGdWYYdoa5KhPViAjckzPRZ4a1BRzIFGumcpwQxRExIdE3ukaU2cUqHtoIiEqatFFNhJLlpAmBH7uN3i3zwW8WjIKGGcqSByCIPfIrlDjCKciEFQSsD1Q6NCiDlw30KnxYZAJT2cBCDStiyCB2lyoanLr73e8+hVUO+0GHapJeQVGb8FrCWkcDR5sWBFTYP/mM50ROW7LZ+oiFtWBmCLGLbR2UIQAIdkPYQEv1k570pLJddnUCBEyvVGSU7aWs+hU4KlzqsuGGACAyTdAZDLd80e/i/jHHHIPYiicv6u9egGoDsyRn5O1udzssws1O8NqHScIcEb5C6S11yJ7xjGeQEG805QYzmIRALR6logCH9A5Z45RAxJz1KJEIFynrv3gRS6pcMOiAf7Ob3Sw5PgChdK6LoMToDha6RjXi+n0gpEgS9hiBoTe4+a0Krx3elh6c6lSzxxGo4VMXUY985CO1yTdklEf0I5lJ0f/BH/wByuJFF7hcU0UrQSgbs7i2vBDAwXWb29xGAve9wyNRo/EjH/mIBIZe5avzRTMo3tBDmafulg6sgichCJjnkamZQazc1j/IaLvY5hVsNS596UtjeeITn5gZ2v3cL8q5e7saC/0nLS6GYrVhJBCkCmDTX5gzYsoiN5wg89No8XsqXy/8EswnWYx+lzWhcqaMQDUHiuJr+MGaWOx84IDsdIzTuEV21FFHFSRviYKymdI4JNyoMDHLPP1Wagiy2cql+UBi+Yz867/+6+Y/IxZjBGOzx/ZhKrjK5chOzbrIRS5y5JFH2o7gIplHdhtczt+f/dmf1al+3epWt5JthqJH1cEyljSOcOGKV7yiTvPZHe94R5H2azHaLXnkoiWVPFatDFq1Q8mzjMoqd2HGXmBovNKVrlTp4YLR5ZFYiw93kPKicDAbCKxlM9j96CBMdu3a1fgnuUxihkM/X+aUuaqG8poQQwW26kuPLDGLo+eFcDz84Q9nM4joLQXHZiqYWoJOZw2n92oiay1c5D3oqqcSCewYQVpqKc3mVDXRUT8tWMzToCBHxfGoGHl0bTlZpk4ijQEWJUDoTAaXLCLEQGJqDqJsskSmrVMGovE4BOzUIwFYDig/CPTIvD/7sz9juQvjlvmArFmECjQTBe3JUj+wRGb3wCT9QPYoN7SnLphFFD5REH1zNnsswpybiRTifuuB3sV46cF4s9Etb3nLe93rXtbj0MaeJWj6/EOI4SMB/OTBBGlbQ5qBZiJxkWnhZQFqIMC8moXXKlAm6BEpK0vJX2Spa+ljX2is9fnH3We5EhsjU7lgsieTUrZRp9Oo8YPPNetPPLGsthbUhn+ICZyPVSgdLa5TnVjOSzagFW4ID7wnnHBCBUf9MQmpLYoMLWCx5CXWssyvWwk0rB7xiEcw0gESyUkoECmSdQJtN+Ox8TiB06Oa9Vjam584aMHBYG9BSoV4adej4UqLec7saETUqQYiNlQVB1+dFJ+GoeHmGLZMKNNKS79qQW+mqTMhq1mtVpDgHMU6oNNO6uCgFkFMnow7Upoo9qhjl7jEJUoqZURwW/RLv+SrKiittp2FNMHwF8jMQMPHjDE2o9/yzv7QMAUoPooDMkjqzLW4lC+6XvGKV3h8zGMeoz11W08ztAaXZaDLW07pUWGE1XmSkiJtJL9qZsVjppAk2dZmKXV9+5B4eOWViGPhF8kuwQLUqmHI5tp2spQQztPZYTTaETrHcAhjFNkqWaVaDKqzpBN06KGHykvbAu3CDHTVmcOKQlOUlPJosrHcQ8amXM2OyQCzCFdVkPrZLSqgwSufQJx8byWBTjHWZgYtxrwe6wU9Jaj6DjUuOCUvYJwqadDouf3tb89yBOZXEnLHnuDnfu7njBljG5nLnEGysg7ERixemw8lyQ/eELDfkQUaaTrygXCta13LoMXOHiy8Q9PaCtdqSEJDaDujYzbAZxpQ7hUsESUfI2lyjigWKgd68s56XDpKOz3cYaofkiCDSYBwsFM4IAsfLmmEhSNYvHWKpWKqqlSDOi5lmpDjjjuupQ9nU4fF1R6uRvfy3kSlshRZjH2hkanxqkeU/tEf/dGaiHX7zXO0qDWWmXqcGDd9ondtnixDrypQXHCZJglRbvSz368D4AYEryYuJmzu69fJPEUfC689QgxW4eyEsB53xx5Kj7JS+m2ZD5bqRp0sZS0Wuw33rnCrbQlFnfCxmbR2eIUVQYA76ndUgIxSRS2BzBY7ezX9zhK543K4wnKZ2UY29jYEAC+fLaqw8NfgDRaK5gDWwJxKpN/UiNgismHrI5wBYqk0pywkqLBozN9cYAOlTUUino/udvPyilICnVJOP8l4FTVydFprImsz2jxEoIhgtD9GIA9XzRs5GjmrYYYg00hEGdSMN30a17ZugcBUNK7GVLzZMHKIcuqOpqpSnZ0xGCBostMqAfJy2NG3Tlef0yxKtJPc3aMI8pRkjnNQ3JGpDBYWJiH55pUsNSgs0bT9Pqj8SQKN0lK/+WZN07rAzNAOH5UWQdOkOVJBo6sfFslb4UaZCxZGKM155ZhaZ8AaEeyRXW2pYcJmExLKFiKEWCCa7PW4jFNhIpM77ru5yl6q7XAwOrcYFkHBWInwZdRbEx6XndiJnUeTRTTINLjcWlNOMlunAWttpFAIGRewWG3AVv54tFFx4poEmGP3aExZ+fksmkzDCpck9DgXlsyenhrbTpZeG4oEuVp9UNNjjZaullc6gTg5pwrjNatDn8/mDOhY9iIT7LIZImE01shpJppIOGnt45FvZJosQ8EhPmI9FSwHpyAjsyMs1Uee9ac/EERZnpkmJTQE66x/8szvuUkwM7WkwpLxhjq4TdJWCVgMePFQebWDPmclHHaVS796qm3Ectalx6VMWG86w9SGvmpiYFhiE5Ic/RnmbTIFWM01ZUYwlaLFu+OChCtYAsw8ZLAqtDBXImEuI0nWb4z5Qy5tV8jrJASk0oW/HNd2IfDKx39e2CKvc5x0sw4wc8xuAxelMBTBbI7Oo1cAJ8HwY2cai5cvZMpB3xHRqyzzJ1Mec0pRxgsxPcLKQY9cc203WaYaO5OaX5WwDqC8YpKIEEJ7WvRASQJLnnhNAyWSR202wN8k0VvRyUf7M3Wtvc6W+YDMdym6FNx4mU0d28o3oeSUBJA2k40oVTQhK9PSJSiSVlDU+kTVT07rYidaUOWyGkFjiEXZrJYl6jhFhh4kDY0p9ygtdjEypsUWyaSxsDO6/ixPJ9zsVKy+E46GU/0CxWpYp0cqTJZcsPQp4jnOfiraK6BsnMrM0G4Sgo/RZ+TKxlDiacchzhhwzVxFCyRdCOqsjQavrJOl2q7e+q0p78wZeiQ21xQxo5icwJSrLm9Zu8a2XlusCDliAeGRbe7eRqZNTmSqhCCqD8Zy7GhUQiocescYvf4ITK7QaM/qlflMUMxnWIwFPXExQNlE2d4jjfL5BS94gYqkjqEksEBAwKO2e5MN+S960Ys8NuicjbVytZzSmePSmCha7IX05J312VCWJ2BsAuamQzvsLp3Wssxg4eySYZsN0Wy+J5BGEbHRmnVkkYreJ2EJI/3mkQoDTaKSr5MK1cm4aNKdGiXEKM1/wYgSaCeccIIfButXNgE7BYHvAH/0ox+NLLHmF2SWa4GZ9tRtdmrtzH27SzjlscpihwRWZchQdKhiMAs2rRihDAI/VeAG3DlcsN2NWOsUk7nKbiSIEMfaJnJA4gJRYXI3fuhiHOFSoVqWVXJXjzsboICSIq+4regbxtLCZeYGPYCMHDKRJdxQhIJXDCOHhV4xeESx6rDDDrOkYhK9mSeJLaOMc/VXwKyhaDSNiQFdfCcQsT839ooNdDFPvxnFaLF8dp5MlzoIBys4bYrcOcK8gsEw8IJRI6dYKJPoctSsrYFYOO3IbYJVLvTkKPeWiiKisouF8c8jCBsqNJrUTdLspNpZBCHatHBN0jDVGRqbFS9DCBqTH9qKLy8cUlm4ORs00xALATTZk+PAZDBfCPeK9tR5tHTwVrlhJ2txCTQHfWmQDBIUMag7GxQFccdbQitALIeAcQsrbxlD5pYXLaNU2+UXTKAAHU/x6mEDRWKkkNl/eGRzvjDMhYZwSJZ+GGGLF27lAxcQyExDERRghOGW+cBgaSMu3LQsIFnsqEspIR6tPmm3oAE1mQHorNW5EwvlIVQZgxJiWJycM1KbeR7JtNh3kLhr167qvmMep8QGpoAiY57pCsiGnnEHSYww4dGv/uqvygfh45Ge8pwQZWJg9EreYrGip45HomZjIdWhwWbCTa6kccqdqTp5ocEdpxTEMoMX2iz3qkUe6IxEvptiKUUPqBZ8BoszRks6My6NeDtcaQ/KI5bQxYaC5RGNOxsIJEqWuhigk+/kyyK+eCuaLEfJKTYgKKBeaXeXkDX0GB0Rs4RrerylgmoS6kFj7yIHLLXbxCNjIXj5bh7NPOrYjD1ACEEGEJREaegXPtN8Gzh6EdhO2LQ1+px7l//iq0DB02AvaRmcZFxs82jIwNPp7tWvfnVyAlmBsmiwT7XYtTZ19sgvKmg05SjabCCQbY7lnFuY/1Ba0DAA8oqJI2tCFEM03NepDLKZLpTGlPHVIWIOUr3hggaXDQrzGTuRqT9o6OVCxGIntVDCEAGP/IWC5YUFEL9cXjmDASncbCVtP5Q+0jA6OHEIwQwnoGQSyE6W21wxVTnylVDy6zfKzA5GWaeStNAlRsJRkmQMIVBiW3Gs86Q7lVte+I1twTAD8Ra/u8tIC2JcrLdihaDtc0L0aPBBSnXkbQzoKSGcLGsbsRGTpsHiGtqW0syaY1hCbJM5w+5YeBKLhuGHuE2DLcu3ebX+0MDQZKEal4S5U2oGIllCTOcIV6cwMt5xqAZM3VUx97lEBT79KQhG9VSxEAOd8tvy3BqZd15BDyYygCU+DvFrNHKkS4+Ni2wQe/ULyBLIXT8CUafXdOJRrdTOpIwBkeg2mN3bkRDCR79LEkG51VvFEQsj/dKVKGObRgZnJ3pLBNmsk0D99iXSgCWIXbKiRoZxSj7U446MLlyzyuO4fsQlhnaKcIHdAS9LcqE7vdaPyBhfsgbO5p0lmtIGQfRGCyGqgCqjkNl+GRXGOXAsIyQSMpfFR64xnmEKEC6jVFAMaW1zXpTcIRyZx+xn/G7ygRDsZS/KyfNcJqRFscnSFyafiAz7W9ziFlaQ7DG8GRCqOUsUlrzTCHmrVbAULxtKriGrR8NVlDUgabkDZ0MP2epPWnQ6O0FjtTTjAph0daYie2l0iYIt75FHHmlKVrgFi/yGlY+jIcM7RyakORYaa/HqcSXEnXfoETsqVPr7x3H4a9ZE5viaVbKlR6HE0kEow8qiYlEgAkoPgd76fGAbRDKvSSuptM0c5HTVSUtpo3PiQkK+SHUOzmlnBOmqLQrtq2AikQjprXt/BWCEspBhM8YJ92gbxzCjAwshcsBjy9DMcw8i5hHirfjKwHw35LkjM3tkbQbjsj4YCQOInhmqlo+kHXPMMTrlJBphHZaR45UTWhVsCtq4gDjY8WqDwhCT7YYwUYRLMDm55eUt5DnVJ5I+ac/QCD3CLe+ksXk6w6jGYsHUIbCEkX5qMkB87yBTyqHMnlgmk40RTgGqr7NR2hsoawba/PYCL+3ISJPSbAjbpK1Krsd9250l/8EdEBKIoMZhdzln8QIdZYiaOonDBQi6QcksBBYUFDfANAgUddLYjQsi7toEosGOoH5tQhC4gJVYErBzErLeohRd6VLM1EejjhkEImBY9nMEMS68XtHOMG0bWZ0mDOB6tA4VEoy4IB4NYpZo+9BtePSW7+SgZ4ClDRosVjdWZCYhWxzHJmY+RyJ2DMaJfTAC+1QmUYHLI7/cc1n+UWFjx0GqyffKzEqLhnvE2kxVWDUY77uRV3oIJEFSYjeJUgcuuuwMVB+SrRktJMmXhZYsEitH0OACDoEucg4//HALOl8QJa6KhtgRtx9xmMN8nM7a8EePPVO1SRYLVdUuX0SigSoajrCBC+70SlxLYMtD0pQPU4gsYraFajmD0qhgmGvNrK0unrJW3KUNENisYiI04Tm6IXkQi9tuyaLScqfUZxLhpQp2ovSgZCHJFRru6PHozrw82i4fqMMlKEAmlpuufK8hEA4eiLIkt/unlC4y9bhg4lNN3xH4jgUBGNnQWOMRseYPDT1YEAg9dfbBzKuaM6DNjUfYBg7bUNKFTEOnHCOBnLzWLoW85eDBBx/Ma/JNsZYd2hZbpEkAuef3QR1TA5DLa36uDxlTLBaSHaWYdFmed9wkvyGDRZ7wS3GM0gQgGXzSEzhzpA0QS/wsiLN9VCNED8MIx86FohYC7vITAhomS0kunfhOi7rsHizysDjynSidZBKYKK8QkAANr4wOiOUXAvReedQJBIlEi3HBL6/c9QtKv5mQkIYeI40pvFUGwm21CRGsUkJDltozIeAgvYgbhh4tROxc5UMEGMWdwcpgduoJSfk8g1dnWGm4GFzm0KUtIgFOo1hIEvCSRk4msQGAQiMQ2OFAcq/Yhkwn3mAxzfPUaE0UnCGwpnXThT4AW4KzAVx0EQW67uCCOePREECyV/w1L+LVgIZzRJ3eGj6UMr7RET1TgaPNbHmo4VJpJaHdJPstgxyKWOj45Y2Ts9KbU3BACQcBldsQkOSTG/m7Lmz9RtB2l/2ifOqgHGr8REmNOynuhorVK5WzGOFn0jRkrVd2KljaWfra4S1R7rwayhrI/IgUuNbm0Qh2YeBMNHGB22M/U1QlMbaL9W/xYIRvxHOv9nnMeHcXF/ySCgY2H0OZXkoNYK/s5aUpEKRCSiNAv9l+Al1eBZQp06RlcFqoMgkjv8j0yyB+ZZJxhV7AEogRYnKCUjQ6JZA7e5yz45WjWEo+eZCQ1OX14I/RthiLYpT8iFnY6atTF5JZhUaqASQbVtHjo/Oxdmy8yDtk0jRi9664qJAP4PIDv/AZlCLIHYtcSlVknTwlAbYsUYn0qxF6OKUNCm32I/BYGoSM/hpZ3vLZ0lg+GE5mJh9sjDFDxecfvHaxWGi0xJFj4uLRBVtvDb9pe8xBPQV9oqBnu3wYcNAwCRS4BlWd/VshluQO3xyHOCZ10KSEaUsJoFlpIXOBwiMz0HjMhhp2GF5VqvSgMbAzz6NrANeuv69Z9vqDmySBEl6lARkE3BnMWse5+jvjQk+4hOx36aDDyM1+BaOg4wooi3dcigAJlLr061G/9GAMhxQ5OPFKnSWtfn+ipse5C08dqCp2ppa8zma2xUsUpXwEkYZLnii12Oczs05cyo5sYSRjcLnQuDTwEq7h1bqMk0DDdfzxx/O3BbeBlnlFVtztjYwUB8tZtRpxFhLVfNmxCvnYo+FpuW3+rsfvgeW2JSyyQqYxAp0fMrWBQCw7/fWnnn7mTVeU2Y+dqY7WpBbXyMEyOeOVHT8o/LowZx3769GPMQczgLSOvn04zEHnt45Aqh4zIrLHpk0e3v/+9ydHz1ieitV7KvRwQTqZihIeYvHaYPDOpE4aM9hj/K5WrcjcpYH0ECMJDFXE1kkOFcikKMxzDTE3ifXZAqXDtuZaPYa/+1wccXkktthl22an1s5JtrtMllA+7LDDsOVz9zKVRLZae1Jj1DGxhNZw+WxggnEFjclSTjdZElJ40ou4BoHQJ83Yq4fzShtP8A64XkkFJnW06PRDT79XLMtZpaddOUxlCQh6JCR1SWuyFMJ+vTIJYeGvejJetaKrMxPDr0QkPHY/SWewPYFHmzA/krQoG4iZ0S88TZnlbr+inB8FpC5r554u5Smox5E+RXRuY+dRxekoFY2roMhI6AGfm075TKhzyEwgGkpbgvmZJa4OIWVJ7GZQs50JJnvWBZ9oxSAoNHrkSAEdNzXkYpTujWpDAmUyo7RjUAJsWxlg3wDzfsKAJXYBArg89o0BnnJJ0EUhSzyyQU+KEBAbqjwVF2sCBH7SgiC9GhHIgRbgdvY6cxlxkunVhkD0TS0+b8yQhrZX4sIpUJC5XT4YlhYo80uokqR8I0Ts2G9hm97kCwpHpBAbfJkuJdhp3El7h7T1MMCFRfFCaU1JLDlSa0a4x3RpKMriKA3g5iM6vU44SPCqcHSYDLR1wSdNq+YDKwyh0U+X+YwNbXqSnA1WJMwTyhY6Oh13o1SbkoaXv3pcNIqvAKVXozWuBQ1ib92FQAW0hnPwKOL9vsYr4BTBxFZeZgxWQ0444YSg8xikyfT7IEY2o2N3CE8yykQ1uDJJT1o8WrugUbWnQOWjV2YOr+wcWBsaq2mfWCltx+OoKfmTh6EtCTPeBM8eQbH1UVXwkpkELhgp1pF0WVSRkJHySlzkA7JBgG210fRt2OiLHhlR+aUqkuZ8i9lYyl7fMtPY3SuTkxFqEfnE9T8o0C+7jMf5haAe2eiiwhaQO1GuxmhV5rQbCDZ2hDtD8kVpXMhaO3WvFMZYfGvnLJudYTBscIZbH4ktGsZNWzJpptLGW/S1cdEl6DBhocqG14IMkjasIqXG+lh+9NFHY5cqHr2VAHjzqCgntvu2kyV/nG8Ay6hgQcaRIg9ydUqhoswx0+FkmGHmNw46Hd8hA5ZVs8fV1R/1yckyYpH5UzZk80snekVXT/sA9EnLdBtzr6xBSmgDg7XOtYUzAuHJDKDoaSz1qrsjJrWGcIdC5OikkfFtK30Pj8yBJEUWBGV2nZmqwAmhHktFNAqiWhwBNJQVUW89SLJiiqbvKB6RTcgR6wFCM5OB5CDXEArtPuUqKKpYmWdEESW5mx7SaGOt0wi0o9KjpHo0Njhe4JnqoE8nr020hMOKWGd3gEXjqNkr82KQhuSRRx6JZdAwhi1N7AaoKI/J0Y6YI6ozer94IrOUUP39bEGnfEXpj+FM2JbhMwyoyzCJ2+BUTawEXejFvRNv4zP30+gV+S5rcMJV4TLKPQIGoAFy35n68z5D0dggyisu28RIG/O0R8L98E/IXIKuOiPAbkQpglRU1LbMB9UHAb8CPwDxZrC1lLe+RdVPV1dvtfuVhJHMcj84ZBLfrXWcKPBdbhCVCrOXNVnssCpe/v2derhjDSd/qCsiAiHEIosgfDScRIFauo4BxcI6ie+FBrCEuPygA0uWU8QAnaaENELJTNyWqx73pn9eaJfqvRIR44jN8wvepkDrJzI7Hti1axdnR5SGhZ11dvts+OQF87zib84ed9xxHvPC2GlqdCgyDvKLCkN4kmcMqwTF7vcsyPrpe7qMGps2nXaHkgeZa4a59nwORxk4Bj7zkq/+Nvk5WOLX6JJUZBrRDhgIocs45WMfLK3jdeapVzMXlgleuSSnVy5t1Z80o8xHEKoLvShghLYiMKGPkl6lBqV+JlFtxiKhc8SEmwv1+I6myACWOv3m1P6tWrNUZIOwx81X5unnuyQk0Gmn1YMeqvH2A2+pEqTyweUcSPKrS35AijIhPtNgh3ALff3sr+gpWR2VoSRTwWnV2+o8CRXq8C9PeAQoA83oZgy97mMw4RhXr20nS1Fp12gYY8iIEaQn6RrCY3TxlhvyycRTpvrN2JQGBdfgbCUyI4HdBJZSpBHlGETZgohh7LhAj8+EJjPAaccYPSdlFaUVDo75ZFVFFgwYyQaMRI0ZJRCNRd2jb36GkPOxzj2OOOIII7lBZdvK+DSidMqxVrkPOshU52Kktrtli/EvPNB3gsQe2i2N/brHI+1SzeI3N32lUKZ10uLoYIZNNZ2DNewe1lUdZGV32Po/44DFrlTn/MQZCIzXz0fDW24BP39VCqKME7OauRyNCm6qc9psHlXjtPnoGyTQVP+EYHF5bOFpLjEk/LrHDEQvqOUfAno7NPMDs3WOb1uCBJdjOngaotKAur5DsA1LRyvKB/mwkqNyWj+UuNDxgw+9tIg7w1R5WoxkiY6eEK9cqXaX3+6t+sVRu0TiWmPYo0upJU3pFCYs2q6EmIq0UwR/lx2SyILIVlLyV+nQ7Nq1K5Yt8wEBpyxi0DA4ykxlgJ/zILB8CSIZWBJGZh8maggqVQXFmFIxzQQAVMhKUSpMqKvCLfiMLFD7Pm30dWzAeIshnko8cZQbCk1c7nxsBykPPQ6ezBAaZlCtHztIRV/SWr/a1lSylTz4qJUYuYbSCoMKjDrNK6nAKAeS4+6KXl3D7os1M+o3EFpMcERK6IQSfBjvFats9UzGc+BR0JEhcLc+hhJGZjPSopklxx57LKzCEz3V1qz6XRqtenUmYRwhrWnbFyzm8Y4lzmYYRgVspYQkVJ14ITFUc5dFMMbyTRUqYWgHhUEntVKKphpdDkhRCR9uBh3iLNdjL0ja1Af5YIAQMhUpCQTOhVgmrLm3/q/rGeNW/MomRgabg/lYWprazeXIhFWl8jsPgAiWHjgr5iiTb7R2kuGtgQBbP0aTaQQqLMkMwDFjy0aOAJNTCaRLZSNQxU5a/zY61UmwKFGBWwbJPUYqfa1x7VLQjF6m9utWMlUbE43BotB5tLNkJO0zHse8KQ6yCyVFvSritakYLfVsO1mikzEESTjRGn4N9uVV/uuxvnN27PfE6KGpKtnMTURVujbajVj9EpH8CNYs+tbBLNOtv+QfOdKRXoXJOPFICzJ3St3ljeoAPn9w6TFRKqxZjRn61Qs5fcwxx8BFXsY449OjKslIku2TzCtqCr2MlzFKGwJckntYFFzfGIwBkpkkwwyMAR09Ske+BZVYNc404Cgs7QiEzXcdo5oEIyp3Gvnh2Z1rjgGtOQhhksne2CbHo6mLHATuLpbLD9JUH8XUfGM+9jbJyo0Fcl8o8Vo99LdrBpLsb4ktcF6ZhzKDhbxQInmh32X7Lv/gw1PIuwjRb7cB83E/lNZmgPXlpzjKB2NeIJQY07kzBmBioQggPtQJnxqEAOa+cVINLuW1v2UsiSkKkzk71c9xxN29ZQME1AXjfILlbZZosFlb4KBkkuCy8FFqCAHKnRY9KOcydalfhjGgDDzAOstlNlGjYkM+oLFuC3lyJuhUy//msBZ2sxFBBo18Ed+S1pQg57XVIwT+jgJQLJQ26gtw8oslgY+dJaxNheJoHWZeZwlwmOHghzQlBv464+rP/rhW3Aer+gW9fpab4BUdBij6UtEcbLHv0cQcXCwR1qOOOopqcKlxTJIwCpAr78hPL9ca3QKBHZhMYhghFTiFz2OSuyvZAkcsmnoGW+bpEdD+RQhWyVsLZdtfA8Gj2pUByNRNZVenVOmIq9TyiuRpzw6hkqLfb+b5hbGrAy254REmMtZ44R1Kd8G1OLbsbo5EY6Q7SqFlNqPUufSob8aFOf4k0evDzQdsr/JRFIjtJMNIH8drsLDAhRj56gagSJPeLlltGBJS0qKf0mHFY6mEkv3unLLmUBJDg3mlChaUhSyXpaUEg/kgNiMC75YXaRlcGjjw7GSYXhbKaj/vGsYR64SGSVIXmUIhB6w8+qaIuPmvGHHQ3/iCUR1D3Ei3l5BsSQvt7lhqECI3HLFIPK6Vn95y3Cs0GiXY2LbtZJnEmZMn54Yz/8V7VaKwecSblWgGSpQMYo1rhNRAnK09Yp/Rq5/RWPTECILITI0jRxJkT04qqWRm2AzXiNvcaBNb8LTjRY+4MjEjNuzcBwqnZInKtVVkSGAwC72KfqxNYG4aUXHRVQ9LUjRwjYWrPenlWvjUwEivq7e9qt0dJh319AoCGL0ay7NBD8px0yPjG11DqWGMKYKNKzRErQYU8gKtPzkkD+Ap9Qp9AgnpXIsLLsTRpLSgoB/t2i7siAOWR71dRWmQzzDEaEoq9xGe182+2LMTbwKLF18yI8PcSWOD+wA1+UDgav9EhISsZU92kpNtRE28arBQ5/iecJ1SZQMOyGisM/nwJD98vO0a+WMw7WmJIEtyn9fBktix1uQ3BofYqpaIiTUkswQOCMJwfBkJ9EagMZ3mWvXdeoJtWDKSZMsyRdBh3cjBlf1oJtYofeLS0/hFoxGZe1ZtQKm3KF0Y84jAvqrKTAT6vSXK2wwgJFjW+b4tOUOmu7cKcaiybeahBAK5uNRvIvcx22wHsazSAJGLHKtbc0D/hoDHAtQ9hIla9UUUTD+OgkxpQ1+MPCLmSK5xxHraFyhOEchH14gaFlyS2WGs8wDDJ6t0usDlGpY6N9/TWD96DYltXThY6SlwRJEfbkFkneozJ8qBPVNRIgiBJJtfOW6xQp1XCXT3uAqXEHAt4RgrCKtOeZtHBSvh7ttOlhgAFx2Daq/6PFbyIaGCjWBEa+TeBpX6WbZq3FqI1i+vhjhM9eSzRlcE2CdCjQFvTULDniWr8R45YFq1M0XQJDP62ozfAJl+jJGNdnozZnpCX3/xUHCzKkUczZGxjaJR7VXsU2r1YETgTvtwJSSEJ/DI9GdnlFRPpLBnA5o0ZhjLMz5p3mbSoCRToxRiC3O76uTElSVj8FgYC0XJyfgsTBH20BgLRTBp9fArAuqwkJzwJA8XmtpBl7ookwYQjfHdY5YnJ2cReMy8eENV2kzIkhaX9mo+aI9GBOkaTGLsPqimiyV4A0SNSDjVg7lXE1+pnjEDXTK5j3EkY9Eesz2ObSmVkzoJmbGzamHtYRmzB8B6oE1vSOrpLTNcEdS5ygUQVvE3ZLIQwZPW/xlqe+ji6G12kmB74eTAH2yMdwzzlhBveTG6xmBih9jbZA59SleNTAKZ+WIvZXKyNal/xHpcFWue65ENqRgJerRFLXi1E5X8iWZcA2AWYklsjz7u2n45q5vyFVeOj+RRLSi9GoI8XYvKely4n0aNmauSEzJMjTjHdWromTjWr2fY8267e/4GRfcMGIF5hJ0ulgzIA0iSe7ullgQOI8m1Z0M1QA379ATL9NMyEZnOGttOll5jW6XOdDpIZ0pvWxkNcTTuyFI5No0nGEmAuFfzloQhwJicUI6y+zg22Tk9JUcGJ2qS0qvIiB0tDdf6M7X7CCSKebk5EpKPpkjPylF/BkRP1Kqc2u7RlGSrBImt1msnRANN7WlEyZGs7dG9DG5XN52l5rDUSHv0egqWxvRMQ+cYGW671v89BL8rYVVkQYSsUG5YQa/GlzRCIBAIEx39rtXH6kK846bGSNN24Vo1tYiMwRHMeMabC+5BGi+yUZ1haYlmNK7buKaufpSjyKtpox+TEos+Ie410CdEYyqg9jBqD2WSGTlv9az6jnJM2iBEZHFF7JXHuWt0ebvZQoMrA7AHWiqSoAdX/YREmZ1jpP7G10lq1v9HyABVPxhNBmZKh5aOwvwCYKxNo3tfcKLP92I6FTYDUJYA42YSRqBwjHaN3hI7BNpEecU1/5KR0zxnuXWmPUXaq+MX/SBQxHs7xA3JrB2lZVpi3ae415Mj2oT4ruQQ0sFyoQz20YgmfzVWwfeIMmLtQYYBOmPPmEl+ZPoTMpiEhlddYyeyhKR9g+pvka/9v1fbEShQvVodCLgocmmEGzPWZH3rQlxPMLJ2POXUGJ+Dw6tfu0fGBwWR9XT3OHhuMMmr0/nPMmq5FgQWBBYETjEElJ2qrW9RGuYDv0/xO14GKKBOL04xSzYrUlXtSFx+a+MXDPa1evp4tpn4QPf4TYaPaoccckiYBJoPjRA70KoX+RsQWCbLDYAsjwsCCwIHHAGTZddRRx3l9yP+qRq/BfXN0gKf7n6pccCN2EpB86I5yY7HRN7vX2xcTJlbkR/wPhssPxGYqZphmXTAFS8KNiGwTJabIFk6FgQWBHYaAVPjhs2QHkp0mg9Mk9oaNnMmg1NxctrS783Gb0l2oDtN5OBaJssDjfN28v/vJ9HbUSz9CwILAgsC+4lAUyMhM2VOw0zprT2lv9A4jcwEPmh14MlI29wxdT9B2Ad2E+SsKoBzKlqyD8Z/h7EsO8vvsIAu7iwInBYRMPdMoZ8GQ/2Cw2S52nMqfiBkz8xMgdiUOaegpwVkWQii1T/9PC1Y9d1gwzJZfjdEefFxQeBURqBJaIxYnR2n+tvPmZZWXw39KdZoUh8b2ObyOD2nmCWrik4jZqya9F3YXo5hvwuDvri8IHBKI9Bko+hvUNxP9vv5jE+VyHy2NGOdWuex9DLStN0Hwk6GN5u9wYsD98iShLMBOMxzHTh1i+TdILDsLHcDzvJqQWBBYCcRUPFdJKr7Lo3mRZ1mhfkRrBl02jup/mTIYsmqYXGciifDG9YNg97JcGUh2WEElslyhwFdxC0ILAgsCCwIfOchsOzov/Niuni0ILAgsCCwILDDCCyT5Q4DuohbEFgQWBBYEPjOQ+D/Azhq+o2XzdviAAAAAElFTkSuQmCC",
    "type":"IMAGE_PNG"
  },
  "imageRedactionConfigs":[
    {
      "infoType":{
        "name":"PHONE_NUMBER"
      },
      "redactionColor":{
        "blue":0.1,
        "green":0.1,
        "red":0.8
      }
    },
    {
      "infoType":{
        "name":"PERSON_NAME"
      },
      "redactionColor":{
        "blue":0.1,
        "green":0.8,
        "red":0.1
      }
    }
  ],
  "inspectConfig":{
    "infoTypes":[
      {
        "name":"PHONE_NUMBER"
      },
      {
        "name":"PERSON_NAME"
      }
    ]
  }
}

JSON output:

{
  "redactedImage":"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"
}

Code examples

Following is sample code in several languages that demonstrates how to use Cloud DLP to redact sensitive text from an image.

Java

import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.ByteContentItem;
import com.google.privacy.dlp.v2.ByteContentItem.BytesType;
import com.google.privacy.dlp.v2.InfoType;
import com.google.privacy.dlp.v2.InspectConfig;
import com.google.privacy.dlp.v2.Likelihood;
import com.google.privacy.dlp.v2.ProjectName;
import com.google.privacy.dlp.v2.RedactImageRequest;
import com.google.privacy.dlp.v2.RedactImageResponse;
import com.google.protobuf.ByteString;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

class RedactImageFile {

  static void redactImageFile(String projectId, String filePath) {
    // String projectId = "my-project-id";
    // String filePath = "path/to/image.png";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlp = DlpServiceClient.create()) {
      // Specify the project used for request.
      ProjectName project = ProjectName.of(projectId);

      // Specify the content to be inspected.
      ByteString fileBytes = ByteString.readFrom(new FileInputStream(filePath));
      ByteContentItem byteItem =
          ByteContentItem.newBuilder().setType(BytesType.IMAGE).setData(fileBytes).build();

      // Specify the type of info and likelihood necessary to redact.
      List<InfoType> infoTypes = new ArrayList<>();
      // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types
      for (String typeName : new String[] {"PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER"}) {
        infoTypes.add(InfoType.newBuilder().setName(typeName).build());
      }
      InspectConfig config =
          InspectConfig.newBuilder()
              .addAllInfoTypes(infoTypes)
              .setMinLikelihood(Likelihood.LIKELY)
              .build();

      // Construct the Redact request to be sent by the client.
      RedactImageRequest request =
          RedactImageRequest.newBuilder()
              .setParent(project.toString())
              .setByteItem(byteItem)
              .setInspectConfig(config)
              .build();

      // Use the client to send the API request.
      RedactImageResponse response = dlp.redactImage(request);

      // Parse the response and process results.
      String outputPath = "redacted.png";
      FileOutputStream redacted = new FileOutputStream(outputPath);
      redacted.write(response.getRedactedImage().toByteArray());
      redacted.close();
      System.out.println("Redacted image written to " + outputPath);

    } catch (Exception e) {
      System.out.println("Error during inspectFile: \n" + e.toString());
    }
  }
}

Node.js

// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Imports required Node.js libraries
const mime = require('mime');
const fs = require('fs');

// Instantiates a client
const dlp = new DLP.DlpServiceClient();

// The project ID to run the API call under
// const callingProjectId = process.env.GCLOUD_PROJECT;

// The path to a local file to inspect. Can be a JPG or PNG image file.
// const filepath = 'path/to/image.png';

// The minimum likelihood required before redacting a match
// const minLikelihood = 'LIKELIHOOD_UNSPECIFIED';

// The infoTypes of information to redact
// const infoTypes = [{ name: 'EMAIL_ADDRESS' }, { name: 'PHONE_NUMBER' }];

// The local path to save the resulting image to.
// const outputPath = 'result.png';

const imageRedactionConfigs = infoTypes.map(infoType => {
  return {infoType: infoType};
});

// Load image
const fileTypeConstant =
  ['image/jpeg', 'image/bmp', 'image/png', 'image/svg'].indexOf(
    mime.getType(filepath)
  ) + 1;
const fileBytes = Buffer.from(fs.readFileSync(filepath)).toString('base64');

// Construct image redaction request
const request = {
  parent: dlp.projectPath(callingProjectId),
  byteItem: {
    type: fileTypeConstant,
    data: fileBytes,
  },
  inspectConfig: {
    minLikelihood: minLikelihood,
    infoTypes: infoTypes,
  },
  imageRedactionConfigs: imageRedactionConfigs,
};

// Run image redaction request
try {
  const [response] = await dlp.redactImage(request);
  const image = response.redactedImage;
  fs.writeFileSync(outputPath, image);
  console.log(`Saved image redaction results to path: ${outputPath}`);
} catch (err) {
  console.log(`Error in redactImage: ${err.message || err}`);
}

Python

import mimetypes

def redact_image(project, filename, output_filename,
                 info_types, min_likelihood=None, mime_type=None):
    """Uses the Data Loss Prevention API to redact protected data in an image.
    Args:
        project: The Google Cloud project id to use as a parent resource.
        filename: The path to the file to inspect.
        output_filename: The path to which the redacted image will be written.
        info_types: A list of strings representing info types to look for.
            A full list of info type categories can be fetched from the API.
        min_likelihood: A string representing the minimum likelihood threshold
            that constitutes a match. One of: 'LIKELIHOOD_UNSPECIFIED',
            'VERY_UNLIKELY', 'UNLIKELY', 'POSSIBLE', 'LIKELY', 'VERY_LIKELY'.
        mime_type: The MIME type of the file. If not specified, the type is
            inferred via the Python standard library's mimetypes module.
    Returns:
        None; the response from the API is printed to the terminal.
    """
    # Import the client library
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp.DlpServiceClient()

    # Prepare info_types by converting the list of strings into a list of
    # dictionaries (protos are also accepted).
    info_types = [{'name': info_type} for info_type in info_types]

    # Prepare image_redaction_configs, a list of dictionaries. Each dictionary
    # contains an info_type and optionally the color used for the replacement.
    # The color is omitted in this sample, so the default (black) will be used.
    image_redaction_configs = []

    if info_types is not None:
        for info_type in info_types:
            image_redaction_configs.append({'info_type': info_type})

    # Construct the configuration dictionary. Keys which are None may
    # optionally be omitted entirely.
    inspect_config = {
        'min_likelihood': min_likelihood,
        'info_types': info_types,
    }

    # If mime_type is not specified, guess it from the filename.
    if mime_type is None:
        mime_guess = mimetypes.MimeTypes().guess_type(filename)
        mime_type = mime_guess[0] or 'application/octet-stream'

    # Select the content type index from the list of supported types.
    supported_content_types = {
        None: 0,  # "Unspecified"
        'image/jpeg': 1,
        'image/bmp': 2,
        'image/png': 3,
        'image/svg': 4,
        'text/plain': 5,
    }
    content_type_index = supported_content_types.get(mime_type, 0)

    # Construct the byte_item, containing the file's byte data.
    with open(filename, mode='rb') as f:
        byte_item = {'type': content_type_index, 'data': f.read()}

    # Convert the project id into a full resource id.
    parent = dlp.project_path(project)

    # Call the API.
    response = dlp.redact_image(
        parent, inspect_config=inspect_config,
        image_redaction_configs=image_redaction_configs,
        byte_item=byte_item)

    # Write out the results.
    with open(output_filename, mode='wb') as f:
        f.write(response.redacted_image)
    print("Wrote {byte_count} to {filename}".format(
        byte_count=len(response.redacted_image), filename=output_filename))

Go

import (
	"context"
	"fmt"
	"io"
	"io/ioutil"

	dlp "cloud.google.com/go/dlp/apiv2"
	dlppb "google.golang.org/genproto/googleapis/privacy/dlp/v2"
)

// redactImage blacks out the identified portions of the input image (with type bytesType)
// and stores the result in outputPath.
func redactImage(w io.Writer, projectID string, infoTypeNames []string, bytesType dlppb.ByteContentItem_BytesType, inputPath, outputPath string) error {
	// projectID := "my-project-id"
	// infoTypeNames := []string{"US_SOCIAL_SECURITY_NUMBER"}
	// bytesType := dlppb.ByteContentItem_IMAGE_PNG
	// inputPath := /tmp/input
	// outputPath := /tmp/output

	ctx := context.Background()

	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}

	// Convert the info type strings to a list of InfoTypes.
	var infoTypes []*dlppb.InfoType
	for _, it := range infoTypeNames {
		infoTypes = append(infoTypes, &dlppb.InfoType{Name: it})
	}

	// Convert the info type strings to a list of types to redact in the image.
	var redactInfoTypes []*dlppb.RedactImageRequest_ImageRedactionConfig
	for _, it := range infoTypeNames {
		redactInfoTypes = append(redactInfoTypes, &dlppb.RedactImageRequest_ImageRedactionConfig{
			Target: &dlppb.RedactImageRequest_ImageRedactionConfig_InfoType{
				InfoType: &dlppb.InfoType{Name: it},
			},
		})
	}

	// Read the input file.
	b, err := ioutil.ReadFile(inputPath)
	if err != nil {
		return fmt.Errorf("ioutil.ReadFile: %v", err)
	}

	// Create a configured request.
	req := &dlppb.RedactImageRequest{
		Parent: "projects/" + projectID,
		InspectConfig: &dlppb.InspectConfig{
			InfoTypes:     infoTypes,
			MinLikelihood: dlppb.Likelihood_POSSIBLE,
		},
		// The item to analyze.
		ByteItem: &dlppb.ByteContentItem{
			Type: bytesType,
			Data: b,
		},
		ImageRedactionConfigs: redactInfoTypes,
	}
	// Send the request.
	resp, err := client.RedactImage(ctx, req)
	if err != nil {
		return fmt.Errorf("RedactImage: %v", err)
	}
	// Write the output file.
	if err := ioutil.WriteFile(outputPath, resp.GetRedactedImage(), 0644); err != nil {
		return fmt.Errorf("ioutil.WriteFile: %v", err)
	}
	fmt.Fprintf(w, "Wrote output to %s", outputPath)
	return nil
}

PHP

/**
 * Redact sensitive data from an image.
 */
use Google\Cloud\Dlp\V2\DlpServiceClient;
use Google\Cloud\Dlp\V2\InfoType;
use Google\Cloud\Dlp\V2\InspectConfig;
use Google\Cloud\Dlp\V2\RedactImageRequest\ImageRedactionConfig;
use Google\Cloud\Dlp\V2\Likelihood;
use Google\Cloud\Dlp\V2\ByteContentItem;

/** Uncomment and populate these variables in your code */
// $callingProjectId = 'The project ID to run the API call under';
// $imagePath = 'The local filepath of the image to inspect';
// $outputPath = 'The local filepath to save the resulting image to';

// Instantiate a client.
$dlp = new DlpServiceClient();

// The infoTypes of information to match
$phoneNumberInfoType = (new InfoType())
    ->setName('PHONE_NUMBER');
$infoTypes = [$phoneNumberInfoType];

// The minimum likelihood required before returning a match
$minLikelihood = likelihood::LIKELIHOOD_UNSPECIFIED;

// Whether to include the matching string in the response
$includeQuote = true;

// Create the configuration object
$inspectConfig = (new InspectConfig())
    ->setMinLikelihood($minLikelihood)
    ->setInfoTypes($infoTypes);

// Read image file into a buffer
$imageRef = fopen($imagePath, 'rb');
$imageBytes = fread($imageRef, filesize($imagePath));
fclose($imageRef);

// Get the image's content type
$typeConstant = (int) array_search(
    mime_content_type($imagePath),
    [false, 'image/jpeg', 'image/bmp', 'image/png', 'image/svg']
);

// Create the byte-storing object
$byteContent = (new ByteContentItem())
    ->setType($typeConstant)
    ->setData($imageBytes);

// Create the image redaction config objects
$imageRedactionConfigs = [];
foreach ($infoTypes as $infoType) {
    $config = (new ImageRedactionConfig())
        ->setInfoType($infoType);
    $imageRedactionConfigs[] = $config;
}

$parent = $dlp->projectName($callingProjectId);

// Run request
$response = $dlp->redactImage($parent, [
    'inspectConfig' => $inspectConfig,
    'byteItem' => $byteContent,
    'imageRedactionConfigs' => $imageRedactionConfigs
]);

// Save result to file
file_put_contents($outputPath, $response->getRedactedImage());

// Print completion message
print('Redacted image saved to ' . $outputPath . PHP_EOL);

C#

        public static object RedactFromImage(string projectId, string originalImagePath, string redactedImagePath)
        {
            var request = new RedactImageRequest
            {
                ParentAsProjectName = new ProjectName(projectId),
                InspectConfig = new InspectConfig
                {
                    MinLikelihood = Likelihood.Likely,
                    Limits = new InspectConfig.Types.FindingLimits() { MaxFindingsPerItem = 5 },
                    IncludeQuote = true,
                    InfoTypes =
                    {
                        new InfoType { Name = "PHONE_NUMBER" },
                        new InfoType { Name = "EMAIL_ADDRESS" }
                    }
                },
                ByteItem = new ByteContentItem
                {
                    Type = ByteContentItem.Types.BytesType.ImagePng,
                    Data = ByteString.FromStream(new FileStream(originalImagePath, FileMode.Open))
                },
            };

            DlpServiceClient client = DlpServiceClient.Create();
            var response = client.RedactImage(request);

            Console.WriteLine($"Extracted text: {response.ExtractedText}");

            // Writes redacted image into file
            response.RedactedImage.WriteTo(new FileStream(redactedImagePath, FileMode.Create, FileAccess.Write));

            return 0;
        }
    }
}

หน้านี้มีประโยชน์ไหม โปรดแสดงความคิดเห็น