Giter VIP home page Giter VIP logo

image-to-base64's Introduction

image-to-base64

Generate a base64 code from an image through a URL or a path.

NPM Version NPM Downloads Build Status Tests Codacy Badge License

About

It's a thing you can use in many situations, for example you can just save the base64 string in your database and increment it in the front-end with the <img> tag in HTML.

Getting Started

Installation:

npm i -S image-to-base64

Code Example:

const imageToBase64 = require('image-to-base64');
//or
//import imageToBase64 from 'image-to-base64/browser';

imageToBase64("path/to/file.jpg") // Path to the image
    .then(
        (response) => {
            console.log(response); // "cGF0aC90by9maWxlLmpwZw=="
        }
    )
    .catch(
        (error) => {
            console.log(error); // Logs an error if there was one
        }
    )

Remember that you can also use an image URL as a parameter.

Code Example:

imageToBase64("https://whatever-image/") // Image URL
    .then(
        (response) => {
            console.log(response); // "iVBORw0KGgoAAAANSwCAIA..."
        }
    )
    .catch(
        (error) => {
            console.log(error); // Logs an error if there was one
        }
    )

Browser Usage

You can import image-to-base64 using the <script> tag in HTML.

Code Example:

<script src="node_modules/image-to-base64/image-to-base64.min.js"></script>

Now you can use the module normally as in the JS examples above, but you can only use a URL and not a path.

LICENSE

MIT ยฉ 2017 RENAN.BASTOS

image-to-base64's People

Contributors

aqrojo avatar dependabot[bot] avatar devtechk avatar fabpico avatar renanbastos93 avatar robsongajunior avatar vastoa avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

image-to-base64's Issues

Module can't be loaded

Could not find a declaration file for module 'image-to-base64'. '/PATH/image-to-base64/image-to-base64.min.js' implicitly has an 'any' type.
Try npm install @types/image-to-base64 if it exists or add a new declaration (.d.ts) file containing declare module 'image-to-base64'; [7016]

How to return the Base64 from object imageToBase64

Thank you very much for sharing your code. I tested the sample code in Readme and I can see the results in console "console.log(response)".

But, I would like to save Base64 into a variable and returns it. I need to use the Base64 in another function for further processing. I tried the following code. I want to save Base64 into variable image_base64:

const imageToBase64 = require('image-to-base64');

imageToBase64("1.jpg") // Path to the image
    .then(
        (response) => {
            //console.log(response)
            var image_base64 = response; // response is Base64
            return image_base64
        }
    )
    .catch(
        (error) => {
            console.log(error); // Logs an error if there was one
        }
    )
console.log(typeof image_base64)

The command "console.log(typeof image_base64)" prints "undefined".

Could you please let me know me how to return Base64 from imageToBase64()?
Thank you very much.

import image, and added to my backgound-image, but shows a little square

Hello everyone,

Well the problem it's on my react app, i'm using styled-components to style my components, and i am doing this:

import styled from 'styled-components'
import image from '../resources/img/img.png';

const CSS = styled.section`
background-image: url(${image});
`

actually webpack changed this, but the characters are to small to create the entire image:

he replicates this:

background-image: url(data:image/png;charset=utf-8;base64,bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArICJzdGF0aWMvbWVkaWEvYmdub3VzYWl3ZWJzaXRlLjdjZTQ4NzU0LnBuZyI7)

EDIT: and this is the source page of this data-uri:

module.exports = __webpack_public_path__ + "static/media/bgnousaiwebsite.7ce48754.png";

how to solve ERR_UNESCAPED_CHARACTERS error?

TypeError [ERR_UNESCAPED_CHARACTERS]: Request path contains unescaped characters
at new ClientRequest (_http_client.js:139:13)
at request (https.js:309:10)
at /usr/src/app/node_modules/image-to-base64/node_modules/node-fetch/index.js:119:13
at new Promise ()
at new Fetch (/usr/src/app/node_modules/image-to-base64/node_modules/node-fetch/index.js:49:9)
at Fetch (/usr/src/app/node_modules/image-to-base64/node_modules/node-fetch/index.js:37:10)
at imageToBase64 (/usr/src/app/node_modules/image-to-base64/image-to-base64.min.js:1:643)
at /usr/src/app/handlers/emails.js:91:36
at Array.map ()
at handler (/usr/src/app/handlers/emails.js:87:33) {
code: 'ERR_UNESCAPED_CHARACTERS'
}
is this related to image names? images are reachable online.

Invalid base 64 string [Help Wanted]

Hi, I convert an image to base 64, got the string and send it to a backend project in the backend I'm decoding the string with https://www.npmjs.com/package/base64-to-image but that doesn't work.

Looking into the code the string generated doesn't match this regular expresion

var matches = base64Str.match(/^data:([A-Za-z-+/]+);base64,(.+)$/);

But I copy the string in https://www.base64decode.net/base64-image-decoder and got the image back

So can you please help me to understand why it's not working.
Thank you in advance

Typescript support

import imageToBase64 from 'image-to-base64';
or 
import { imageToBase64 } from 'image-to-base64';
...
imageToBase64(url) // you can also to use url
      .then(
                (response) => {
                  console.log(response);
                }
              )
              .catch(
                (error) => {
                  console.log(error);
                }
              );

Above code in Typescript throws lot of errors on compile. Even i tried adding the js file, but no help.

ERROR in ./node_modules/image-to-base64/image-to-base64.min.js
Module not found: Error: Can't resolve 'fs' in 'C:\Dev\ROM\Development\src\RomCloud\RomCloud.Web.UI\node_modules\image-to-base64'
ERROR in ./node_modules/node-fetch/index.js
Module not found: Error: Can't resolve 'http' in 'C:\Dev\ROM\Development\src\RomCloud\RomCloud.Web.UI\node_modules\node-fetch'
ERROR in ./node_modules/node-fetch/lib/response.js
Module not found: Error: Can't resolve 'http' in 'C:\Dev\ROM\Development\src\RomCloud\RomCloud.Web.UI\node_modules\node-fetch\lib'
ERROR in ./node_modules/node-fetch/index.js
Module not found: Error: Can't resolve 'https' in 'C:\Dev\ROM\Development\src\RomCloud\RomCloud.Web.UI\node_modules\node-fetch'
ERROR in ./node_modules/image-to-base64/image-to-base64.min.js
Module not found: Error: Can't resolve 'path' in 'C:\Dev\ROM\Development\src\RomCloud\RomCloud.Web.UI\node_modules\image-to-base64'
ERROR in ./node_modules/node-fetch/index.js
Module not found: Error: Can't resolve 'stream' in 'C:\Dev\ROM\Development\src\RomCloud\RomCloud.Web.UI\node_modules\node-fetch'
ERROR in ./node_modules/node-fetch/lib/body.js
Module not found: Error: Can't resolve 'stream' in 'C:\Dev\ROM\Development\src\RomCloud\RomCloud.Web.UI\node_modules\node-fetch\lib'
ERROR in ./node_modules/node-fetch/index.js
Module not found: Error: Can't resolve 'zlib' in 'C:\Dev\ROM\Development\src\RomCloud\RomCloud.Web.UI\node_modules\node-fetch'

Build fails in create-react-app

Hi there, thanks for this amazing library. It helped me a lot. I'm new to all this, So excuse me if this isn't something I should create an issue for. But this is whats happening:

I've installed the library using npm and it works flawlessly. But when I try to create a production build of my app using npm run build it fails with the following error.
screenshot from 2018-02-09 16-43-10

The link mentioned leads to a section of react-react-app repo where the say:
screenshot from 2018-02-09 16-53-20

Sounds like they suggest that you transpile your code to ES5 code. Could you please look into it? Also, do you have any idea how I might ignore this so I can keep developing while it's being fixed?

Thanks for the hard work again! ๐Ÿ˜„

Error message not meaningful

My error response of a failing conversion currently is:

error: TypeError: Failed to fetch
    message: "Failed to fetch"
    stack: "TypeError: Failed to fetch"

It would be great to have more detailed error informations, such as response code and any security (cross origin) errors.

Error on UglifyJs build

Hi team,

First, congrats for this lib! It's really useful.

I am using it with a VueJS and Webpack. In the moment of the "npm run build" occurs:

ERROR in static/js/1.833d0ac1ff25b9ddb113.js from UglifyJs
Unexpected token: operator (>) [./node_modules/image-to-base64/index.js:7,0][static/js/1.833d0ac1ff25b9ddb113.js:11389,30]

Any suggestion to fix?

Cannot find module 'fs' in 'image-to-base64'

I am using the Wix, and I am facing this problem "Cannot find module 'fs' in 'image-to-base64'". THe version of the library is 2.1.1. Do you know the solution for it in Wix?

Thanks

CORS error when using imageToBase64

How do I disable the CORS header in the request? When I run the code below, I get a CORS error.

        imageToBase64('<image_url>') // Image URL
            .then((response) => {
                console.log(response);
                doc.addImage(response, 'JPEG', width / 2, 650, 400, 125);
            }
            )
            .catch((error) => {
                console.log(error); // Logs an error if there was one
            }
            )

Access to fetch at '<image_url>' from origin '<mywebpage>' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

Help please, thank you!

TypeScript not supported

npm install @types/image-to-base64
npm ERR! code E404
npm ERR! 404 Not Found: @types/image-to-base64@latest

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/me/.npm/_logs/2018-12-07T08_38_59_357Z-debug.log

'fs' module

error: bundling failed: Error: While trying to resolve module fs from file D: \otto-mobile\node_modules\image-to-base64\index.js, the package D:\otto-mobile \node_modules\fs\package.json was successfully found. However, this package its
elf specifies a main module field that could not be resolved (D:\otto-mobile\ node_modules\fs\index.js. Indeed, none of these files exist:

  • D:\otto-mobile\node_modules\fs\index.js(.native||.android.js|.native.js|.js |.android.json|.native.json|.json)
  • D:\otto-mobile\node_modules\fs\index.js\index(.native||.android.js|.native. js|.js|.android.json|.native.json|.json)
    at ResolutionRequest.resolveDependency (D:\otto-mobile\node_modules\metro\sr
    c\node-haste\DependencyGraph\ResolutionRequest.js:103:15)
    at DependencyGraph.resolveDependency (D:\otto-mobile\node_modules\metro\src
    node-haste\DependencyGraph.js:272:4579)
    at dependencies.map.relativePath (D:\otto-mobile\node_modules\metro\src\Delt
    aBundler\traverseDependencies.js:376:19)
    at Array.map ()
    at resolveDependencies (D:\otto-mobile\node_modules\metro\src\DeltaBundler\t
    raverseDependencies.js:374:16)
    at D:\otto-mobile\node_modules\metro\src\DeltaBundler\traverseDependencies.j
    s:212:33
    at Generator.next ()
    at step (D:\otto-mobile\node_modules\metro\src\DeltaBundler\traverseDependen
    cies.js:297:313)
    at D:\otto-mobile\node_modules\metro\src\DeltaBundler\traverseDependencies.j
    s:297:473
    at

This problem appears when i try to use this dependency in a react native project. It makes the compilation impossible

one typo in README.md

Hi,
I found one typo in README.md file.

Example web

image2base64("https://whatever-image/")
    .then(
        (response) => {
            console.log(response); //iVBORw0KGgoAAAANSwCAIA...
        }
    )
    .catch(
        (error) => {
            console.log(error); //Exepection error....
        }
    )

to

imageToBase64("https://whatever-image/")
    .then(
        (response) => {
            console.log(response); //iVBORw0KGgoAAAANSwCAIA...
        }
    )
    .catch(
        (error) => {
            console.log(error); //Exepection error....
        }
    )

good luck~!

statSync issue due to too large image size

Hi,

.png from 7 kb is working correctly, but the one from 12kb is not working and giving .statSync errors.
All the other sizes above at least 12kb are not working, and everything below max 7kb is working.

Blank Page in Safari : Create React APP project

So I uploaded one of my apps where I used this library and safari blocked it due to regex.

My website was working fine in chrome but on safari, it was showing a blank white page.

After debugging for more than 7 hours finally found the culprit library and removed it and everything is working fine now.

fs dependency was not found

When I run
npm install image-to-base64 --save
or
npm install https://github.com/renanbastos93/image-to-base64.git --save
it installs successfully, but the server emits an error:

This dependency was not found:

  • fs in ./~/image-to-base64/image-to-base64.min.js
    To install it, you can run: npm install --save fs

When I install fs, nothing happens and the error continues to appear, can anyone help me with that?

Base64 image converter is not valid

I am using image-to-base64 package since the beginning of this project and it has always work with multiple iterations (more than 80k) but since yesterday the base64 image content returned is not valid.

My code:

async getBase64Image(uri: string) {
    if (!uri) {
      return undefined;
    }

    try {
      const base64 = await imageToBase64(uri);

      return base64;
    } catch (err) {
      console.error('Error', err);
    }
  }

Using this URL: https://img.discogs.com/kkOIThj3YKEG8pTqQuR_5_UaW9o=/fit-in/599x591/filters:strip_icc():format(jpeg):mode_rgb():quality(90)/discogs-images/R-3466216-1491175119-2467.jpeg.jpg

It returns this invalid base64:

PCFET0NUWVBFIGh0bWw+CjwhLS1baWYgbHQgSUUgN10+IDxodG1sIGNsYXNzPSJuby1qcyBpZTYgb2xkaWUiIGxhbmc9ImVuLVVTIj4gPCFbZW5kaWZdLS0+CjwhLS1baWYgSUUgN10+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTcgb2xkaWUiIGxhbmc9ImVuLVVTIj4gPCFbZW5kaWZdLS0+CjwhLS1baWYgSUUgOF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTggb2xkaWUiIGxhbmc9ImVuLVVTIj4gPCFbZW5kaWZdLS0+CjwhLS1baWYgZ3QgSUUgOF0+PCEtLT4gPGh0bWwgY2xhc3M9Im5vLWpzIiBsYW5nPSJlbi1VUyI+IDwhLS08IVtlbmRpZl0tLT4KPGhlYWQ+Cgo8dGl0bGU+QXR0ZW50aW9uIFJlcXVpcmVkISB8IENsb3VkZmxhcmU8L3RpdGxlPgoKPG1ldGEgbmFtZT0iY2FwdGNoYS1ieXBhc3MiIGlkPSJjYXB0Y2hhLWJ5cGFzcyIgLz4KPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgo8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPUVkZ2UsY2hyb21lPTEiIC8+CjxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9pbmRleCwgbm9mb2xsb3ciIC8+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIiAvPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGlkPSJjZl9zdHlsZXMtY3NzIiBocmVmPSIvY2RuLWNnaS9zdHlsZXMvY2YuZXJyb3JzLmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4scHJvamVjdGlvbiIgLz4KPCEtLVtpZiBsdCBJRSA5XT48bGluayByZWw9InN0eWxlc2hlZXQiIGlkPSdjZl9zdHlsZXMtaWUtY3NzJyBocmVmPSIvY2RuLWNnaS9zdHlsZXMvY2YuZXJyb3JzLmllLmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4scHJvamVjdGlvbiIgLz48IVtlbmRpZl0tLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj5ib2R5e21hcmdpbjowO3BhZGRpbmc6MH08L3N0eWxlPgoKCjwhLS1baWYgZ3RlIElFIDEwXT48IS0tPgo8c2NyaXB0PgogIGlmICghbmF2aWdhdG9yLmNvb2tpZUVuYWJsZWQpIHsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgY29va2llRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29va2llLWFsZXJ0Jyk7CiAgICAgIGNvb2tpZUVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgfSkKICB9Cjwvc2NyaXB0Pgo8IS0tPCFbZW5kaWZdLS0+CgoKICAKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIC8vPCFbQ0RBVEFbCiAgICAoZnVuY3Rpb24oKXsKICAgICAgd2luZG93Ll9jZl9jaGxfb3B0PXsKICAgICAgICBjdklkOiAiMiIsCiAgICAgICAgY1R5cGU6ICJpbnRlcmFjdGl2ZSIsCiAgICAgICAgY05vdW5jZTogIjI1NDg4IiwKICAgICAgICBjUmF5OiAiNjQxNTBlZjIzOTIxNWQyYiIsCiAgICAgICAgY0hhc2g6ICIwZWNmN2QyYmU5YmU5OWMiLAogICAgICAgIGNGUFd2OiAiYiIsCiAgICAgICAgY1RUaW1lTXM6ICI0MDAwIiwKICAgICAgICBjTHQ6ICJuIiwKICAgICAgICBjUnE6IHsKICAgICAgICAgIHJ1OiAiYUhSMGNITTZMeTlwYldjdVpHbHpZMjluY3k1amIyMHZhMnRQU1ZSb2FqTlpTMFZIT0hCVWNWRjFVbDgxWDFWaFZ6bHZQUzltYVhRdGFXNHZOVGs1ZURVNU1TOW1hV3gwWlhKek9uTjBjbWx3WDJsall5Z3BPbVp2Y20xaGRDaHFjR1ZuS1RwdGIyUmxYM0puWWlncE9uRjFZV3hwZEhrb09UQXBMMlJwYzJOdlozTXRhVzFoWjJWekwxSXRNelEyTmpJeE5pMHhORGt4TVRjMU1URTVMVEkwTmpjdWFuQmxaeTVxY0djPSIsCiAgICAgICAgICByYTogImJtOWtaUzFtWlhSamFDOHhMakFnS0N0b2RIUndjem92TDJkcGRHaDFZaTVqYjIwdlltbDBhVzV1TDI1dlpHVXRabVYwWTJncCIsCiAgICAgICAgICBybTogIlIwVlUiLAogICAgICAgICAgZDogIlJqY1U0c1A0b1FCQ2orMjBNQU5pR1FVRlJ6RFdRZ050TnpOSTdHdE9jS3BBMzE3RVo2UER2eFpEZlByR2hwOGo5bGRLVFBBaThlSnZZQ3ZRWEtBcnF5TkUvS3l5Nk5PSG5jUXlpVEVDUUVXZ1RIaUZmdVAyZEN5MForSHZtUVpXN2QvVXFMOFhUS1cwQzhja29id1ZKOUtQVlFsWEx5Vkh4MGZ3cUN5aWRZM2FZRU1aZzJoR0JjcUVaZTByNzZkV1orMk9tc0swUmlCKys4ODFWNFQrQ0wvcHV5TFZJM3k1Nm52b292NmRrRmxmK1Y3WEttK29LMGJoVGtFb1Arb3ZOdk1oMk5Xam9Ub0lJbm5qazg4WnNzNWNQdlI4eS80UnVSNmErUkxBVmMweVpjaFBPMzVwOFBjYzhFQWNzaDZlMGRZLzQxQjYwV3VKS2xSc3NWQXE3VmdNdjdyM2F2enZpbU9ub245aC9Sd1NGOVBiOVc5OXFhclY4ZzNKVGI4U0hqd0lDMTYyK2F2WnFVUEoxeTdTemF2MnpKdjFtbzFHa3lYVW94eFEzSnFkL1NEa29qNXZxOG5NY0pqOGd1Y2tKRDZ2akpQUStnRlBmUmNvL1huaWxlK2xOS0ZPeE9lSVBheFpPSkNsRHh4cjFtaG9xdmtycjBxVlVqTjhnRjFnYkx5Njc0ZnR2d1FpWGMxMVZrTUFTa2czTXhGODEzZzhZcVhYV0wxU1pncDFBWE1OZENHRlhEa0QyRlN4ZUJOem1PcGNwL0M2ZGlwc3hPa3hvNGNhZzVqYU9wdmdYTjNrTEt1RHVVRHVTTDRpSFdJSGlrLzR4M09TWGFCYnFyUkxENXNVKzZMK1NvN3JJMzEvUTBUTnovVG1IMEFSNUxTNWczOUFjdy9zeFlMbG5oMzdMZkFoQlkrdzhvU0VOUXR0OGRKV1dib29rVkg1a2dhNGx4OG5ENFN3WWlzd3VwSEh0blo4L2NXV0Y2V1M0c3lpVUdvcnV3TkJVRjM2MElKMndldkRTL2d3SldWS1Q3WUdSQms0L0c5aWE3NHF4OVVPMUY4dUEyYncxejFMcXd1QmlNNnY2MTNYRXphN3ZQamZEQzMrWmZxSnc0aXlvU3JpcW1QVkM3S3hoaGd1SG93SW14djFwKzFiRktCelNRbkthNDJkZDByYk0rQkUyRFNRUzZ6TVhFVFEwOEdsTGdZMFdJS0YzOUVPdkthUWVrVzhXQlVpc0Vpa1lDZz0iLAogICAgICAgICAgdDogIk1UWXhPRFkxTmpJMk9TNHhPRE13TURBPSIsCiAgICAgICAgICBtOiAiLzZLVCtmZERIZTBhYlRoNldhczh4SU14VlI5YlYwZnpPUEhZNk1IZU11cz0iLAogICAgICAgICAgaTE6ICJqQnIxMUxNdnVpRTN3eTA1RFpKNlhRPT0iLAogICAgICAgICAgaTI6ICJVRi9UWVlVTzBWRnFkU3JJRjlGOFRnPT0iLAogICAgICAgICAgemg6ICJ5LzVnYnRxdjNyeU5uWGtFVjNva2p6MHFNd0FLdzhoclFNaUdNclpZSXFzPSIsCiAgICAgICAgICB1aDogIm8zbjZ4RXQzNVhRU1Bna01IbHRTdWROaVdZM0QxOFpFV3ZJVnhxSGtQKzQ9IiwKICAgICAgICAgIGhoOiAiUkc2Y3ZoT3JxM0w4TmI1cWVUdzJ1OFlETTArNkxQQWVZTSt2NkQ2K3oyND0iLAogICAgICAgIH0KICAgICAgfTsKICAgIH0oKSk7CiAgICAvL11dPgogICAgPC9zY3JpcHQ+CiAgCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICNjZi13cmFwcGVyICNzcGlubmVyIHt3aWR0aDo2OXB4OyBtYXJnaW46ICBhdXRvO30KICAjY2Ytd3JhcHBlciAjY2YtcGxlYXNlLXdhaXR7dGV4dC1hbGlnbjpjZW50ZXJ9CiAgLmF0dHJpYnV0aW9uIHttYXJnaW4tdG9wOiAzMnB4O30KICAuYnViYmxlcyB7IGJhY2tncm91bmQtY29sb3I6ICNmNTgyMjA7IHdpZHRoOjIwcHg7IGhlaWdodDogMjBweDsgbWFyZ2luOjJweDsgYm9yZGVyLXJhZGl1czoxMDAlOyBkaXNwbGF5OmlubGluZS1ibG9jazsgfQogICNjZi13cmFwcGVyICNjaGFsbGVuZ2UtZm9ybSB7IHBhZGRpbmctdG9wOjI1cHg7IHBhZGRpbmctYm90dG9tOjI1cHg7IH0KICAjY2YtaGNhcHRjaGEtY29udGFpbmVyIHsgdGV4dC1hbGlnbjpjZW50ZXI7fQogICNjZi1oY2FwdGNoYS1jb250YWluZXIgaWZyYW1lIHsgZGlzcGxheTogaW5saW5lLWJsb2NrO30KICBAa2V5ZnJhbWVzIGZhZGVyICAgICB7IDAlIHtvcGFjaXR5OiAwLjI7fSA1MCUge29wYWNpdHk6IDEuMDt9IDEwMCUge29wYWNpdHk6IDAuMjt9IH0KICAjY2Ytd3JhcHBlciAjY2YtYnViYmxlcyB7IHdpZHRoOjY5cHg7IH0KICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZXIgeyAwJSB7b3BhY2l0eTogMC4yO30gNTAlIHtvcGFjaXR5OiAxLjA7fSAxMDAlIHtvcGFjaXR5OiAwLjI7fSB9CiAgI2NmLWJ1YmJsZXMgPiAuYnViYmxlcyB7IGFuaW1hdGlvbjogZmFkZXIgMS42cyBpbmZpbml0ZTt9CiAgI2NmLWJ1YmJsZXMgPiAuYnViYmxlczpudGgtY2hpbGQoMikgeyBhbmltYXRpb24tZGVsYXk6IC4yczt9CiAgI2NmLWJ1YmJsZXMgPiAuYnViYmxlczpudGgtY2hpbGQoMykgeyBhbmltYXRpb24tZGVsYXk6IC40czt9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgPGRpdiBpZD0iY2Ytd3JhcHBlciI+CiAgICA8ZGl2IGNsYXNzPSJjZi1hbGVydCBjZi1hbGVydC1lcnJvciBjZi1jb29raWUtZXJyb3IiIGlkPSJjb29raWUtYWxlcnQiIGRhdGEtdHJhbnNsYXRlPSJlbmFibGVfY29va2llcyI+UGxlYXNlIGVuYWJsZSBjb29raWVzLjwvZGl2PgogICAgPGRpdiBpZD0iY2YtZXJyb3ItZGV0YWlscyIgY2xhc3M9ImNmLWVycm9yLWRldGFpbHMtd3JhcHBlciI+CiAgICAgIDxkaXYgY2xhc3M9ImNmLXdyYXBwZXIgY2YtaGVhZGVyIGNmLWVycm9yLW92ZXJ2aWV3Ij4KICAgICAgCiAgICAgICAgPGgxIGRhdGEtdHJhbnNsYXRlPSJjaGFsbGVuZ2VfaGVhZGxpbmUiPk9uZSBtb3JlIHN0ZXA8L2gxPgogICAgICAgIDxoMiBjbGFzcz0iY2Ytc3ViaGVhZGxpbmUiPjxzcGFuIGRhdGEtdHJhbnNsYXRlPSJjb21wbGV0ZV9zZWNfY2hlY2siPlBsZWFzZSBjb21wbGV0ZSB0aGUgc2VjdXJpdHkgY2hlY2sgdG8gYWNjZXNzPC9zcGFuPiBpbWcuZGlzY29ncy5jb208L2gyPgogICAgICAKICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJjZi1zZWN0aW9uIGNmLWhpZ2hsaWdodCBjZi1jYXB0Y2hhLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2Ytd3JhcHBlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjZi1jb2x1bW5zIHR3byI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNmLWNvbHVtbiI+CiAgICAgICAgICAgIAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNmLWhpZ2hsaWdodC1pbnZlcnNlIGNmLWZvcm0tc3RhY2tlZCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz0iY2hhbGxlbmdlLWZvcm0gaW50ZXJhY3RpdmUtZm9ybSIgaWQ9ImNoYWxsZW5nZS1mb3JtIiBhY3Rpb249Ii9ra09JVGhqM1lLRUc4cFRxUXVSXzVfVWFXOW89L2ZpdC1pbi81OTl4NTkxL2ZpbHRlcnM6c3RyaXBfaWNjKCk6Zm9ybWF0KGpwZWcpOm1vZGVfcmdiKCk6cXVhbGl0eSg5MCkvZGlzY29ncy1pbWFnZXMvUi0zNDY2MjE2LTE0OTExNzUxMTktMjQ2Ny5qcGVnLmpwZz9fX2NmX2NobF9jYXB0Y2hhX3RrX189YWY4NjE1YmY0ZjU4MDRlZWRmYTY3MmM2Y2NmOTg5YTJlYWQwNDE4MS0xNjE4NjU2MjY5LTAtQVJZWmhEOGVFUjEtcW5YRFNtNExoMmRJQzVPeWdZZnZfUmZHQzFqM3FNUFZvUlFKVEl1VmM1VnpBeWROYzZPM05SVGNxVF9IempPamdjU1NadzV5MmtZUHd6azA2Uk56TkthdVZnVUpQQ19ZQUZLYVZNdnZMX2xacTREVTNPdzNZVFpqbW91RENJWU5lcmNiaEJVdjNmODMwQ0RhdXdQNW5fVkJYT21pRFk5b0VDbUwtQWM1Z0pXWXhreURJUkg3X3BWVjdzUWVXT2xFd1JvYjR4LVkyVExwTG5MME51VHh2WHl6N2NhUHF1cWVnYnVMSVFKZEEzbE9XX1ZKSnJ6Yl9CLXExS2x1SFdIX0NFZUtlRzFKUHMtR0F6TUYtYjFxRzJrdzZ0b0o4TVY4UXNOb2g2eVRMTGhmWDBTS3hNT25lRE1NOHhFYXlrR0NCUEhXcGw1eGxLQ0ludmttZ1hKNmYzbnJfNFBIY2F3dEw5MnI4eGQ4SDhIbmxpcnlCQ3NyTi1tMUNoZnA4YVJNcUZ6SHA1bndxR2MxZWNBTGlyOG96akoyaElOVFRXTDgxZFlHR1REOXVrVlRWVERfVTFReERRLWNhb3l0bzNPbDRmZFVGeGZ1bDNaUmJTMnN0Z2p1QmNGTUlhM0tGM0dTU09BU2NMNTRaWWI3bjNLemdGTU5pQjFjVm9GcDFPZW45cGwzc1N2S01jMHkwQ19EWDJ2RURIQUp6UzNvWVY4YllIdURZUG9id1NNMHd0dC1hUnNXTTktN3czV2NsbWJFc25rXzZPdEZocjZtTGFtclBPOEVsdTBUV0xlRi1jVWkwUTUyQnpYdTl6MHJRYWtqOTR2ZnpyU2V3WEFzNXA2eVk5OEpseXdEMjZNUjczRy13QUNodTVMZXBYcFRMYWlqMDFLZmd2WnhvcFNJYkdmQkZuVjJXdzFVaVVTOF9TV21sQnpxY196N2Z2c3A0WjhqM0tXMHJ6NUVGYk5EUjVaRmV6dXQyQkZqUzlQM3ZNc1l1cThuQWs1YnI5Z0VkSGFwUk1XSEtxcFhHOFdTbDBMMHdJSHFKdGV4RWwyN25jSjJjcVZRY0xyaXl0SmxCalhSdG1uSS1QR0hlQXBLRUtCRTJ3TWR5SU80Tkd5S29Ra2Z0T2sxYmdFX01mTS1zazZLIiBtZXRob2Q9IlBPU1QiIGVuY3R5cGU9ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI+CiAgCiAgICA8ZGl2IGlkPSdjZi1wbGVhc2Utd2FpdCc+CiAgICAgIDxkaXYgaWQ9J3NwaW5uZXInPgogICAgICAgIDxkaXYgaWQ9ImNmLWJ1YmJsZXMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJidWJibGVzIj48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnViYmxlcyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ1YmJsZXMiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPHAgZGF0YS10cmFuc2xhdGU9InBsZWFzZV93YWl0IiBpZD0iY2Ytc3Bpbm5lci1wbGVhc2Utd2FpdCI+UGxlYXNlIHN0YW5kIGJ5LCB3aGlsZSB3ZSBhcmUgY2hlY2tpbmcgeW91ciBicm93c2VyLi4uPC9wPgogICAgICA8cCBkYXRhLXRyYW5zbGF0ZT0icmVkaXJlY3RpbmciIGlkPSJjZi1zcGlubmVyLXJlZGlyZWN0aW5nIiBzdHlsZT0iZGlzcGxheTpub25lIj5SZWRpcmVjdGluZy4uLjwvcD4KICAgICAgPC9kaXY+CiAgCiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iciIgdmFsdWU9ImQ3ZWI4NjhlNWQ5MjU0ODE0NjNhYWI0ZTAyYjcyNjUzNWJhNGNiNWEtMTYxODY1NjI2OS0wLUFjOEordUFjdG5nTmNRODNJSlY2REVhQ2pwUStkenFPSzBYUVlVUlR0enY3NmVMOWRtNjJvYWFTMDk4WmtCQ00xY1oyQXVvQ1JTbEFDZEwvZlFFVkd6cXlYRDNtREVvR1VaR3pRbGJyTHoxN3F2VVkzZ0RVUjZlTmFoUVZNNHdDeG1OVzF2am54QTNyakZsUXlzOUR3eXJ6azFnZ09Wa2ZWMVBPZThEb3gyV1NvUkV0NEgzem5lQkVIb1lwRWJNbS9CN2hRWWpFRWFLL3VjMWpmRmhFTElrNThaNHJ6bDRMSjRtMzZtdnBpRUozcjNyWnZ4VHNGVmIwNXYweWlTbG5YOG10WlYrN0lQSUErV01hM01zNC9xNTVqelVuMEdWWk1PMG5LTzViamhMSTd3Wm1heHp2dGZEejNIZk5rVGFDZUZKeXprUDh2RENyNG1HUU8vMGk1by9abkFjMTIwUTFUN0tvN2MzblZ4TVdablo4YjlveWMzVDJ6ODFSOEYvMWV2NnhHY3RtWDd6SDdWTUdEdDdQOVQzaEVWeVVuTW1VOTFicFpsZkh4OUpQZ0JRN1hIS0hlNWVDVjF4aFFpQ2pyQjJNT0ZuMHNrV0U0Vm9JMjJrRUswZlM5S2lFSzROVEhvOGN3b1l2NEtMTjE3T25UVG1sSy9ZM2ZoWkdIT3ZnM3dLaE12TUNEenZDQzZXcFZTeFE1MnIrMGJaUnZ3aHZTN09xUXhKcFlqMi84S0U4anc1TCtvNGhVMFFqM21PMURtL3lPNVZrNmpnY0Z6NGZJTzRnV3hnYldIOGw3NUU3S0dTVWVQbEdsRFJlRDJIWXVMcGtjU0hvUWZhRGUyMWx4dE1takErZk1DZCt4RHQ5OFh4dnd3QVRvbm0yQmpBNEsxemhzTTRqem9aM3VaR2RqZVhMNnZYT2RzcjkyeGYyWFY4eFBlelhJYU1abnFhUTJrR1Z4bHlid3ZmUU1jQ0l2UUJtbW9FQ0RhbktRck5nL1RaOXZyYnlUQlp0NTl3NkJSYlRCMWg5ZU1xa1pBdXdpallyN0tnZnZUMm52WmRGanZ1akU0anpjT0xDUWRFeU9keVVwVWtwdU92NEpWTW9nTXVObjBzVG1TNitoZVFiU2ZrdzNFTDRpQlVpLzMxdmhzV0xDbkthb1MrNU8wZEp3Y2ozL0syb1I0YjZTTk1ja2dzcHplRTBZYk5zdjhmUTJ5WENVcktOTUE5d05sdCtwYTFnajBRZk0wZ0FSYkZaSmNVRkpXaEpIZEJncEFKRzVBSWx1TU1UVklrbjZQM3RiVlNORjJhOUxVbXVvbnAxSWhUekdqZFpYS3BDOGUyaGQzd1FNekhWQ3J0bXBDYXF5TXRYdmc0cEZuNE81R2FLR2xTam9DMUcwL0UwRTJTTkN5M0ZIUDZnZG1BUXhKdjRmdUFvTTZ1UWhFUXE1YTZYWnJNNlNtZmx0SEhZUEZCcFZCaDVhbmgrVVkrUHdGaktzWTJnSndIUkcxWlRmZytoUEkxUGRXc3JQa1ZTRHZ0WTZweVpEbmY1QndYMFdlVWZieDhsSDBxR09ob2EzM2c4bnd1ay9HSFBCb29DTVdVVlUwa21qVlVSTHpPL3BQc04rYmxudUhPUWRVUVVLeVBFM3k3QVJxaXcwTkN2MlRWc2hBZGlLakorbTM4UitrWDBFbTFFK01WSUI1aElnRXdhcEdydUYxWEYwdUdIcHJzUU0xR2tDdlNPL1puSFNLbnZ1L3hwc0d6cnpQcE9xbDZwNkl5L3B3NGhQNW5iNllpUFNCNWFrQXFjbzkxNU9QZjV1Q1NER0MvMFJ4cmxvdGVwQktMSkZOaHhuQXQwZ29IRmE5RmhwL0czQlpLQ1lSMmxwdUpRcGYvWUlZcUJSYW1hNE9rT09EWnRVSmxXMGNVaUdZRmFUN2lnOGNJOVdUUHlXbTJSZXlPanlvNzlrR0pMRG1YcnE2Q3R2MHlTbkxqbkNiaU1QQUliVkREdGlhRlovOVNyeXdOcXhJOG1CQmkxQlljb0J6Vzd3dFRLeVNybDM5TU9QczhTMStnQmNxeWFmZ2R4QTZKUVU5aFZXbGVGbWRTVjJnYnFPSHBvQk1WcitkRjRhU1l5MExlOGRIeU13ditqSVMzcGFZejVGeE1uNitIYjRCbEZTa2o1YUEreWN2ZkQ5K1NadkJmZUFrcjE3QUIwODc3dml6SzYxY2lDS0JvaVJhK0FBVGpZaG9KVWVxajRMR1JySWFHaUxYWlRUaEV2cldmMVRNd3Nzd1c3OTEvSUE1R0xvWk1Oem0yZm5VeWlSYm1uRkhRbk9aTXJOa1hmY2x3VVZmZlpBcllXVXpTYmtVMkp6bmNmd2Fja0xSaUxMd2Vvajl6MTdhSHFpZlZDSVNFYkhuUlpPVElWZnlSWXhqYWFwTWpTUU9saFd3SkdQL0xmRm9vTiI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2ZfY2FwdGNoYV9raW5kIiB2YWx1ZT0iaCI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idmMiIHZhbHVlPSJmNjBkM2Y5ZDc1Y2ZiZDk3ZjgyYTJiOGM5OWQ3ZDJhMiI+CiAgCiAgPG5vc2NyaXB0IGlkPSJjZi1jYXB0Y2hhLWJvb2ttYXJrIiBjbGFzcz0iY2YtY2FwdGNoYS1pbmZvIj4KICA8aDEgZGF0YS10cmFuc2xhdGU9InR1cm5fb25fanMiIHN0eWxlPSJjb2xvcjojYmQyNDI2OyI+UGxlYXNlIHR1cm4gSmF2YVNjcmlwdCBvbiBhbmQgcmVsb2FkIHRoZSBwYWdlLjwvaDE+CiAgPC9ub3NjcmlwdD4KICAgIDxkaXYgaWQ9Im5vLWNvb2tpZS13YXJuaW5nIiBjbGFzcz0iY29va2llLXdhcm5pbmciIGRhdGEtdHJhbnNsYXRlPSJ0dXJuX29uX2Nvb2tpZXMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogICAgICA8cCBkYXRhLXRyYW5zbGF0ZT0idHVybl9vbl9jb29raWVzIiBzdHlsZT0iY29sb3I6I2JkMjQyNjsiPlBsZWFzZSBlbmFibGUgQ29va2llcyBhbmQgcmVsb2FkIHRoZSBwYWdlLjwvcD4KICAgIDwvZGl2PgogIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAvLzwhW0NEQVRBWwogICAgdmFyIGEgPSBmdW5jdGlvbigpIHt0cnl7cmV0dXJuICEhd2luZG93LmFkZEV2ZW50TGlzdGVuZXJ9IGNhdGNoKGUpIHtyZXR1cm4gITF9IH0sCiAgICAgIGIgPSBmdW5jdGlvbihiLCBjKSB7YSgpID8gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGIsIGMpIDogZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGIpfTsKICAgICAgYihmdW5jdGlvbigpewogICAgICAgIHZhciBjb29raWVzRW5hYmxlZD0obmF2aWdhdG9yLmNvb2tpZUVuYWJsZWQpPyB0cnVlIDogZmFsc2U7CiAgICAgICAgaWYoIWNvb2tpZXNFbmFibGVkKXsKICAgICAgICAgIHZhciBxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vLWNvb2tpZS13YXJuaW5nJyk7cS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICB9CiAgICAgIH0pOwogIC8vXV0+CiAgPC9zY3JpcHQ+CiAgPGRpdiBpZD0idHJrX2NhcHRjaGFfanMiIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOnVybCgnL2Nkbi1jZ2kvaW1hZ2VzL3RyYWNlL2NhcHRjaGEvbm9qcy9oL3RyYW5zcGFyZW50LmdpZj9yYXk9NjQxNTBlZjIzOTIxNWQyYicpIj48L2Rpdj4KPC9mb3JtPgogIAogIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIC8vPCFbQ0RBVEFbCiAgICAoZnVuY3Rpb24oKXsKICAgICAgICB2YXIgaXNJRSA9IC8oTVNJRXxUcmlkZW50XC98RWRnZVwvKS9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpOwogICAgICAgIHZhciB0cmtqcyA9IGlzSUUgPyBuZXcgSW1hZ2UoKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOwogICAgICAgIHRya2pzLnNldEF0dHJpYnV0ZSgic3JjIiwgIi9jZG4tY2dpL2ltYWdlcy90cmFjZS9jYXB0Y2hhL2pzL3RyYW5zcGFyZW50LmdpZj9yYXk9NjQxNTBlZjIzOTIxNWQyYiIpOwogICAgICAgIHRya2pzLmlkID0gInRya19jYXB0Y2hhX2pzIjsKICAgICAgICB0cmtqcy5zZXRBdHRyaWJ1dGUoImFsdCIsICIiKTsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRya2pzKTsKICAgICAgICB2YXIgY3BvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIGNwby50eXBlPSd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIGNwby5zcmM9Ii9jZG4tY2dpL2NoYWxsZW5nZS1wbGF0Zm9ybS9oL2Ivb3JjaGVzdHJhdGUvY2FwdGNoYS92MT9yYXk9NjQxNTBlZjIzOTIxNWQyYiI7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChjcG8pOwogICAgfSgpKTsKICAgIC8vXV0+CiAgICA8L3NjcmlwdD4KICAKCgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNmLWNvbHVtbiI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2Ytc2NyZWVuc2hvdC1jb250YWluZXIiPgogICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNmLW5vLXNjcmVlbnNob3QiPjwvc3Bhbj4KICAgICAgICAgICAgICAKICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJjZi1zZWN0aW9uIGNmLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImNmLWNvbHVtbnMgdHdvIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNmLWNvbHVtbiI+CiAgICAgICAgICAgIDxoMiBkYXRhLXRyYW5zbGF0ZT0id2h5X2NhcHRjaGFfaGVhZGxpbmUiPldoeSBkbyBJIGhhdmUgdG8gY29tcGxldGUgYSBDQVBUQ0hBPzwvaDI+CiAgICAgICAgICAgIAogICAgICAgICAgICA8cCBkYXRhLXRyYW5zbGF0ZT0id2h5X2NhcHRjaGFfZGV0YWlsIj5Db21wbGV0aW5nIHRoZSBDQVBUQ0hBIHByb3ZlcyB5b3UgYXJlIGEgaHVtYW4gYW5kIGdpdmVzIHlvdSB0ZW1wb3JhcnkgYWNjZXNzIHRvIHRoZSB3ZWIgcHJvcGVydHkuPC9wPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0iY2YtY29sdW1uIj4KICAgICAgICAgICAgPGgyIGRhdGEtdHJhbnNsYXRlPSJyZXNvbHZlX2NhcHRjaGFfaGVhZGxpbmUiPldoYXQgY2FuIEkgZG8gdG8gcHJldmVudCB0aGlzIGluIHRoZSBmdXR1cmU/PC9oMj4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cCBkYXRhLXRyYW5zbGF0ZT0icmVzb2x2ZV9jYXB0Y2hhX2FudGl2aXJ1cyI+SWYgeW91IGFyZSBvbiBhIHBlcnNvbmFsIGNvbm5lY3Rpb24sIGxpa2UgYXQgaG9tZSwgeW91IGNhbiBydW4gYW4gYW50aS12aXJ1cyBzY2FuIG9uIHlvdXIgZGV2aWNlIHRvIG1ha2Ugc3VyZSBpdCBpcyBub3QgaW5mZWN0ZWQgd2l0aCBtYWx3YXJlLjwvcD4KCiAgICAgICAgICAgIDxwIGRhdGEtdHJhbnNsYXRlPSJyZXNvbHZlX2NhcHRjaGFfbmV0d29yayI+SWYgeW91IGFyZSBhdCBhbiBvZmZpY2Ugb3Igc2hhcmVkIG5ldHdvcmssIHlvdSBjYW4gYXNrIHRoZSBuZXR3b3JrIGFkbWluaXN0cmF0b3IgdG8gcnVuIGEgc2NhbiBhY3Jvc3MgdGhlIG5ldHdvcmsgbG9va2luZyBmb3IgbWlzY29uZmlndXJlZCBvciBpbmZlY3RlZCBkZXZpY2VzLjwvcD4KICAgICAgICAgICAgCiAgICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICAKCiAgICAgIDxkaXYgY2xhc3M9ImNmLWVycm9yLWZvb3RlciBjZi13cmFwcGVyIHctMjQwIGxnOnctZnVsbCBweS0xMCBzbTpweS00IHNtOnB4LTggbXgtYXV0byB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnQgYm9yZGVyLXNvbGlkIGJvcmRlci0wIGJvcmRlci10IGJvcmRlci1ncmF5LTMwMCI+CiAgPHAgY2xhc3M9InRleHQtMTMiPgogICAgPHNwYW4gY2xhc3M9ImNmLWZvb3Rlci1pdGVtIHNtOmJsb2NrIHNtOm1iLTEiPkNsb3VkZmxhcmUgUmF5IElEOiA8c3Ryb25nIGNsYXNzPSJmb250LXNlbWlib2xkIj42NDE1MGVmMjM5MjE1ZDJiPC9zdHJvbmc+PC9zcGFuPgogICAgPHNwYW4gY2xhc3M9ImNmLWZvb3Rlci1zZXBhcmF0b3Igc206aGlkZGVuIj4mYnVsbDs8L3NwYW4+CiAgICA8c3BhbiBjbGFzcz0iY2YtZm9vdGVyLWl0ZW0gc206YmxvY2sgc206bWItMSI+PHNwYW4+WW91ciBJUDwvc3Bhbj46IDIuODAuMTUwLjIzMTwvc3Bhbj4KICAgIDxzcGFuIGNsYXNzPSJjZi1mb290ZXItc2VwYXJhdG9yIHNtOmhpZGRlbiI+JmJ1bGw7PC9zcGFuPgogICAgPHNwYW4gY2xhc3M9ImNmLWZvb3Rlci1pdGVtIHNtOmJsb2NrIHNtOm1iLTEiPjxzcGFuPlBlcmZvcm1hbmNlICZhbXA7IHNlY3VyaXR5IGJ5PC9zcGFuPiA8YSByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIGhyZWY9Imh0dHBzOi8vd3d3LmNsb3VkZmxhcmUuY29tLzV4eC1lcnJvci1sYW5kaW5nIiBpZD0iYnJhbmRfbGluayIgdGFyZ2V0PSJfYmxhbmsiPkNsb3VkZmxhcmU8L2E+PC9zcGFuPgogICAgCiAgPC9wPgo8L2Rpdj48IS0tIC8uZXJyb3ItZm9vdGVyIC0tPgoKCiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogIHdpbmRvdy5fY2ZfdHJhbnNsYXRpb24gPSB7fTsKICAKICAKPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==

Since it is a big project and I could not debug the problem I am writting this issue in hope I can get some type of answer.

should work with react

Stated that using it dons't as should with reactjs. So, we need implemention some bugfix.

Cors-Policy Error

Access to fetch at 'http://abc.com' from origin 'https://xy.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

I m getting this response when using in web, please let know anything I m missing thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.