You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: xmputil.go
    path of file: ./repos/unipdf/model/xmputil
    
    the code of the file until where you have to start completion: //
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/

// Package xmputil provides abstraction used by the pdf document XMP Metadata.
package xmputil ;import (_bd "errors";_fe "fmt";_be "github.com/trimmer-io/go-xmp/models/pdf";_db "github.com/trimmer-io/go-xmp/models/xmp_mm";_b "github.com/trimmer-io/go-xmp/xmp";_aab "github.com/unidoc/unipdf/v3/core";_ac "github.com/unidoc/unipdf/v3/internal/timeutils";
_aa "github.com/unidoc/unipdf/v3/internal/uuid";_ba "github.com/unidoc/unipdf/v3/model/xmputil/pdfaextension";_g "github.com/unidoc/unipdf/v3/model/xmputil/pdfaid";_d "strconv";_a "time";);

// MediaManagementVersion is the version of the media management xmp metadata.
type MediaManagementVersion struct{VersionID string ;ModifyDate _a .Time ;Comments string ;Modifier string ;};

// Document is an implementation of the xmp document.
// It is a wrapper over go-xmp/xmp.Document that provides some Pdf predefined functionality.
type Document struct{_fg *_b .Document };

// PdfInfoOptions are the options used for setting pdf info.
type PdfInfoOptions struct{InfoDict _aab .PdfObject ;PdfVersion string ;Copyright string ;Marked bool ;

// Overwrite if set to true, overwrites all values found 
    
func (_ga *Document )SetPdfInfo (options *PdfInfoOptions )error {if options ==nil {return _bd .New ("\u006ei\u006c\u0020\u0070\u0064\u0066\u0020\u006f\u0070\u0074\u0069\u006fn\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_efd ,_cb :=_be .MakeModel (_ga ._fg );
if _cb !=nil {return _cb ;};if options .Overwrite {*_efd =_be .PDFInfo {};};if options .InfoDict !=nil {_cf ,_aac :=_aab .GetDict (options .InfoDict );if !_aac {return _fe .Errorf ("i\u006e\u0076\u0061\u006c\u0069\u0064 \u0070\u0064\u0066\u0020\u006f\u0062\u006a\u0065\u0063t\u0020\u0074\u0079p\u0065:\u0020\u0025\u0054",options .InfoDict );
};var _dab *_aab .PdfObjectString ;for _ ,_af :=range _cf .Keys (){switch _af {case "\u0054\u0069\u0074l\u0065":_dab ,_aac =_aab .GetString (_cf .Get ("\u0054\u0069\u0074l\u0065"));if _aac {_efd .Title =_b .NewAltString (_dab );};case "\u0041\u0075\u0074\u0068\u006f\u0072":_dab ,_aac =_aab .GetString (_cf .Get ("\u0041\u0075\u0074\u0068\u006f\u0072"));
if _aac {_efd .Author =_b .NewStringList (_dab .String ());};case "\u004b\u0065\u0079\u0077\u006f\u0072\u0064\u0073":_dab ,_aac =_aab .GetString (_cf .Get ("\u004b\u0065\u0079\u0077\u006f\u0072\u0064\u0073"));if _aac {_efd .Keywords =_dab .String ();};
case "\u0043r\u0065\u0061\u0074\u006f\u0072":_dab ,_aac =_aab .GetString (_cf .Get ("\u0043r\u0065\u0061\u0074\u006f\u0072"));if _aac {_efd .Creator =_b .AgentName (_dab .String ());};case "\u0053u\u0062\u006a\u0065\u0063\u0074":_dab ,_aac =_aab .GetString (_cf .Get ("\u0053u\u0062\u006a\u0065\u0063\u0074"));
if _aac {_efd .Subject =_b .NewAltString (_dab .String ());};case "\u0050\u0072\u006f\u0064\u0075\u0063\u0065\u0072":_dab ,_aac =_aab .GetString (_cf .Get ("\u0050\u0072\u006f\u0064\u0075\u0063\u0065\u0072"));if _aac {_efd .Producer =_b .AgentName (_dab .String ());
};case "\u0054r\u0061\u0070\u0070\u0065\u0064":_fc ,_bb :=_aab .GetName (_cf .Get ("\u0054r\u0061\u0070\u0070\u0065\u0064"));if _bb {switch _fc .String (){case "\u0054\u0072\u0075\u0065":_efd .Trapped =true ;case "\u0046\u0061\u006cs\u0065":_efd .Trapped =false ;
default:_efd .Trapped =true ;};};case "\u0043\u0072\u0065a\u0074\u0069\u006f\u006e\u0044\u0061\u0074\u0065":if _fd ,_ec :=_aab .GetString (_cf .Get ("\u0043\u0072\u0065a\u0074\u0069\u006f\u006e\u0044\u0061\u0074\u0065"));_ec &&_fd .String ()!=""{_gf ,_ebe :=_ac .ParsePdfTime (_fd .String ());
if _ebe !=nil {return _fe .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0043\u0072e\u0061\u0074\u0069\u006f\u006e\u0044\u0061t\u0065\u0020\u0066\u0069\u0065\u006c\u0064\u003a\u0020\u0025\u0077",_ebe );};_efd .CreationDate =_b .NewDate (_gf );
};case "\u004do\u0064\u0044\u0061\u0074\u0065":if _gda ,_fcd :=_aab .GetString (_cf .Get ("\u004do\u0064\u0044\u0061\u0074\u0065"));_fcd &&_gda .String ()!=""{_cg ,_eg :=_ac .ParsePdfTime (_gda .String ());if _eg !=nil {return _fe .Errorf ("\u0069n\u0076\u0061\u006c\u0069d\u0020\u004d\u006f\u0064\u0044a\u0074e\u0020f\u0069\u0065\u006c\u0064\u003a\u0020\u0025w",_eg );
};_efd .ModifyDate =_b .NewDate (_cg );};};};};if options .PdfVersion !=""{_efd .PDFVersion =options .PdfVersion ;};if options .Marked {_efd .Marked =_b .Bool (options .Marked );};if options .Copyright !=""{_efd .Copyright =options .Copyright ;};if _cb =_efd .SyncToXMP (_ga ._fg );
_cb !=nil {return _cb ;};return nil ;};